zoukankan      html  css  js  c++  java
  • Java 到底是值传递还是引用(址)传递?

    写代码的时候遇到一个非常有意思的问题,至于过程在此就不多提了,略显尴尬,直入正题吧。

    首先纠正常见的三个错误的理解

    (1)Java是引用传递

    (2)普通类型是值传递,引用类型是址传递

    (3)普通类型是值传递,对象类型是址传递

    小案例

    int num = 10;
    String str = "hello";

     

    num = 20;
    str = "java";

    对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
    对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
    如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

    划重点(关键在于理解这个)

    StringBuilder sb = new StringBuilder("iphone");
    void foo(StringBuilder builder) {
    builder = new StringBuilder("ipad");
    }
    foo(sb); // sb 没有被改变,还是 "iphone"。

    值传递和引用传递之前的区别的重点是什么?

    最终结论

    Java中方法参数传递方式是按值传递。
    如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
    如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

  • 相关阅读:
    #include<unistd.h>存在linux中,含有系统服务的函数
    Value Categories
    Main function
    Phases of translation
    Memory model
    Unqualified name lookup
    Qualified name lookup
    Name lookup
    Definitions
    Object lifetime
  • 原文地址:https://www.cnblogs.com/pzyin/p/14693146.html
Copyright © 2011-2022 走看看