黑马程序员技术交流社区
标题:
对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