首页 > 代码库 > java中传参内幕
java中传参内幕
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不变的原因是一样的。
纯属个人观点,欢迎指导。
java中传参内幕
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。