日期:2014-05-20  浏览次数:20759 次

一个赋值的问题。菜鸟问大侠
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值也改变了
给分吧,朋友,我实在没分了