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中方法参数传递方式是按值传递。
    如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
    如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

  • 相关阅读:
    PostgreSQL Monitor pg_activity
    bzoj2333 [SCOI2011]棘手的操作
    bzoj1499 [NOI2005]瑰丽华尔兹
    bzoj2561 最小生成树
    bzoj2038 [2009国家集训队]小Z的袜子(hose)
    bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
    bzoj3589 动态树
    bzoj4034 [HAOI2015]树上操作
    bzoj4774 修路
    2018.1.14 省选模拟赛
  • 原文地址:https://www.cnblogs.com/pzyin/p/14693146.html
Copyright © 2011-2022 走看看