java中的参数传递传的其实是value。
先说一种现象,废话不多说,直接代码:
A类(作为参数传递):
public class A {
int i=1;
}
B类:public class B {
B(A a){
a.i+=1;
}
}
Test类(运行类):
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B(a);
B b1 = new B(a);
B b2 = new B(a);
System.out.println(a.i);
}
}
结果是:4
另一种情况:
B类:
public class B {
B(Integer i){
i+=1;
}
}
Test类:
public class Test {
public static void main(String[] args) {
Integer i = new Integer(1);
B b = new B(i);
B b1 = new B(i);
B b2 = new B(i);
System.out.println(i);
}
}
结果是:1
为什么第一种情况会改变,第二种情况没变呢,想了一个晚上,个人觉得应该是这样的:
传参时传过去的是value,
对于第一种情况,我定义key为a的value名为va,如果是我想的那样,那么传过去的就是va,就算va如何变,他的索引,即key a一直对应的就是va。所以输出a时,就是输出va。
而第二种情况呢,
我定义key为i(Test的i)的value为vi1,同样将vi1传过去,vi1加一后将赋值给i(B的i),i的value定义为vi2,所以变的是vi2不是vi1,跳回Test,i(Test的i)对应的value还是vi1,所以没变。
如果要使它变,必须返回vi2赋值给i(Test的i)。
如果要使第一种情况不变,那就在方法里面new另外一个A类,那么改变的是新的A类,原来的key a对应的value就不会改变。这给第二种情况i不变的原因是一样的。
纯属个人观点,欢迎指导。
原文地址:http://blog.csdn.net/u012367513/article/details/24672373