上代码
类MyObj
public class MyObj {
public int b;
}
类T5
public class T5 {
public static void main(String[] args) {
T5 t = new T5();
MyObj obj = new MyObj();
t.test2(obj);// 这里传递的参数obj就是引用传递
System.out.println(obj.b);
}
public void test2(MyObj obj) {
obj = new MyObj(); //test
obj.b = 100;
System.out.println(obj.b);
}
}
这里输出的是:100 0
但是如果我们屏蔽了test2中的这一行代码
obj = new MyObj();
//test
此时test2方法如下
public void test2(MyObj obj) {
// obj = new MyObj(); //test
obj.b = 100;
System.out.println(obj.b);
}
那么此时程序会输出 100 100
那么问题就来了:方法中传入的obj是地址,但为什么一个指向的原对象改变,一个没改变?
*******************************************重点来了**********************************************************
对此的分析后的解释为:在方法中因为用obj指向了新的对象地址,所以此时的obj是原obj的实参。
所以对于原obj指向的对象没有任何影响。
以上观点结合了部分c++指针思想,还得到了大佬(胡大佬,大家都知道的)的大力帮助,在此之上总结而来。
忘了说还参考了一篇网上大佬的文献,文献地址在楼下评论栏中。