class Number{
int i;
}
public class Assignment{
public static void main(Sting [] args){
Number n1= new Number();
Number n2= new Number();
n1.i=8;
n2.i=48;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i);
n1=n2;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i);
n1.i=24;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i); //这里不明白
问题是这里只是把n1.i赋值怎么会改变n2.i的值呢。
------解决方案--------------------
Java中所有的变量名都是引用,要么为null,要么引用着堆中动态分配着的对象。你的这一句:
n1=n2;
导致n1和n2这两个变量引用到同一个对象上去了,就是原来n2引用着的那个。
原来被变量n1引用着的对象成为垃圾,可随时被垃圾回收器收掉了。
------解决方案--------------------
因为你把n1=n2了
这样n1和n2指向的是同一块内存地址,即这个时候n1和n2已经是同一个对象了,你操作n1就等于是操作n2了,而你这个时候在执行下一句代码 "n1.i=24 "
就等于是在操作n2了,所以n2值也改变了
给分吧,朋友,我实在没分了