• java中参数传递的问题


    public class Test {
    public static void main(String[] args) {
    StringBuffer a = new StringBuffer("A");
    StringBuffer b = new StringBuffer("B");
    operate(a,b);
    System.out.println(a + "," +b);
    }
    static void operate(StringBuffer x, StringBuffer y) {
    x.append(y);
    y =x;
    }
    }

    为什么上面的a的值会发生改变呢?

    而b的值又不变呢?

    不是说java中方法传参数都是传值吗?


    解答:

           传参的时候,不管传什么,都是一个copy的过程. 简单点说.就是把实参的值拷贝给形参, 方法里面操纵的只是你的形参, 而对实参一点影响都没有..!
    基本数据类型是copy值,对象类型是copy的地址.记住这一点,你上面的问题就很好解决了.
    拿你的程序说话吧,关于引用问题5楼已经说的很好了

    Java code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Test {
    publicstatic void main(String[] args) {
    StringBuffer a =new StringBuffer("A");
    StringBuffer b =new StringBuffer("B");
    operate(a,b);
    System.out.println(a +"," +b);
    }
    static void operate(StringBuffer x, StringBuffer y) {
    x.append(y);
    y =x;//这里,只是说明变量y的引用变了,而跟b没有任何关系
    }
    }

    这里, a是指向"A"的.b是指向"B"的.这点应该没有问题.
    然而你调用方法的时候把a,b作为参数传进去,那么.这个时候,只是把a的地址copy拷贝给了x,b的地址copy拷贝给了y,
    方面里面,x指向的对象发生了变化,变成了"AB",然而a跟x是指向同一个对象的. 下面输出a会是"AB"


    “Java中对象一定是引用传递的,所以当不需要传递引用时,可以用clone(),拷贝一个副本进去,”         “  语言是规则,算法是思想”

    关于b,看上面的注释,调试下就知道了,当执行到那句代码时.. 现在是x,y,a都指向"AB"这个对象.而b还是始终指向"B"的,始终没有改变..所以才有你下面那个结果..

  • 相关阅读:
    团队管理(八)
    VantUI 二级标签栏
    easyui combobox动态添加数据的问题
    easyui combobox选中的问题
    读书笔记:周鸿祎我的互联网方法论
    读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3
    读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 简介
    网页设计中11 款最好CSS框架
    科普:google的数字图书馆
    实用总结,如何截取翻屏网页
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4379893.html
Copyright © 2020-2023  润新知