public void call(Test t) {
//因为方法参数方法是值传递,等于是创造了一个和实参同名的引用指向同一个对象的变量,所以无论
在方法内怎么改变实参变量所指向引用,实际上方法外部创建的作为实参的变量的真实引用都不会改变,
还会指向原来的对象。
Test t2 = new Test();
t2.setName("cba');
t.setName("abc");
t = t2 ;
}
public static void main(String[] arg) {
Test obj = new Test();
//这里因为是值传递,传递的只是引用,而这里的obj其实只是临时复制的变量,关于它的改动对外面的obj毫无影响,
只有改动他们所相同的共同指向的对象,才能对外面的obj输出结果产生影响
call (obj) ;
System.out.println("obj"+obj.getName());
}
综上所述,这里的call方法并未实际改变实参所引用的对象,它只是将配给传递进来引用的变量的引用再次转向了另一个新创建的对象,
而这个变量和外边的obj实际上可当做两个变量看,因此自然不会对外面的obj产生影响。
对于 public void call(Test t) {
Test t2 = new Test();
t2.setName("cba');
t.setName("abc");
t = t2 ;
}