在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);
}
输出的值为李四,李四
我在此处的理解与原来的说法相同,传递的是地址,这是“高级”具备的功能,即一个变量的改变影响另一个变量。 |
|