java中传参内幕
时间:2014-04-29 13:43:23
收藏:0
阅读:301
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不变的原因是一样的。
纯属个人观点,欢迎指导。
评论(0)