黑马程序员技术交流社区

标题: 对Java中值传递与引用传递的理解 [打印本页]

作者: 山雨欲来风满楼    时间: 2016-9-8 00:38
标题: 对Java中值传递与引用传递的理解
在Java中值传递与引用传递一直是争议挺大的,一方说没有引用传递,一方说值传递传递实际值,而引用传递传递地址。下面我来以一种“进化”的方式说说我的理解。
假设一般的类型的传递称为是“初级”,String类型的传递是“中级”,而其它类型(都是类)的传递是“高级”,下面以一个几个例子来解释为何如此称呼。
例:
public  static void main(String [] asd){


        int a = 10;

        int b = a;

        a = 100;


        System.out.println(a,b);


}

输出的是100,10。
以原本的说法是跟着变量一起存储的是实际值,而后进行的是实际值的传递。
而以我的观点认为跟着变量一起存储的是地址,而后进行的是地址的传递,只是它是“初级”的,因此不具备一个变量的改变影响另一个变量。
例:
public static void main(String [] asd){

       String s = "a";

       String s1 = s;

       s = "b";

       System.out.println(s,s1);

}

输出的值是a,b
而原来的说法在这里的争议最大,因此有人说Java中没有引用传递。
而以我看来String类型是介于“初级”与“高级”的过渡期,称为“中级”,即进化还不完全,从输出值中可以看出它与“初级”的类似处,但String本身是一个类,但还没完全具备“高级”的功能,因此称为“中级”。
例:
public static void main(String [] asd){

       Student stu = new Student();

       stu.getName("张三");

       Student stu2 = stu1;

       stu.getName("李四");

       System.out.println(stu,stu2);
      
}
输出的值为李四,李四
我在此处的理解与原来的说法相同,传递的是地址,这是“高级”具备的功能,即一个变量的改变影响另一个变量。
作者: Toxicant    时间: 2016-9-8 00:42
地址也是值得
作者: 山雨欲来风满楼    时间: 2016-9-9 00:49
Toxicant 发表于 2016-9-8 00:42
地址也是值得

对的!地址值也是值
作者: 最美不是下雨天    时间: 2016-9-9 01:34
为什么我去跑的时候的结果和你说的结果不一样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2