话不多说直接上代码。
import org.junit.Test;
public class Test1 {
@Test
private void change1(){
int i = 2;
Test2 t2 = new Test2();
t2.i = 3;
change2(t2, i);
System.out.print(t2.i);
}
@org.junit.Test
private void change2(Test2 t2,int i) {
i = 0;
t2.i = 4;
Test2 t22 = new Test2();
//t2指向t22对象地址
t2 = t22;
System.out.print(t2.i+""+i);
}
public static void main(String[] args) {
Test1 t1 = new Test1();
t1.change1();
}
class Test2 {
public int i=1;
}
}
输出的结果是104。
很多新手通常是用递归思想去解成101,在change2()方法结束后,jvm内容回收机制,会把方法创建的对象地址回收(删除),即回收之后返回出去是
i = 0;(回收)
t2.i = 4;
Test2 t22 = new Test2();(回收)
t2 = t22;(回收)
System.out.print(t2.i+""+i);(回收)
t2则是chang1里所创建的Test2对象。
所以输出是4
感谢收看