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的值呢。

解决方案 »

  1.   

    Java中所有的变量名都是引用,要么为null,要么引用着堆中动态分配着的对象。你的这一句:
    n1=n2;
    导致n1和n2这两个变量引用到同一个对象上去了,就是原来n2引用着的那个。
    原来被变量n1引用着的对象成为垃圾,可随时被垃圾回收器收掉了。
      

  2.   

    因为你把n1=n2了
    这样n1和n2指向的是同一块内存地址,即这个时候n1和n2已经是同一个对象了,你操作n1就等于是操作n2了,而你这个时候在执行下一句代码"n1.i=24"
    就等于是在操作n2了,所以n2值也改变了
    给分吧,朋友,我实在没分了
      

  3.   

    前面一句,N1=N2,两个引用指向了同一个对象,你赋值给n1或者n2的i,都会影响到另一个结果,不信你把n1.i=24改为n2.i=24试下,结果应该是一样的
      

  4.   

    class Number{
    int i;
    }class Assignment{
    public static void main(String[] 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);  
    }
    }
    ==================================================
    你写的不标准哟...我修改了哈.,两个引用指向了同一个对象,所以不对拉
      

  5.   

    n1=n2;
    System.out.println("1:n1.i:"+n1.i+"n2.i:"+n2.i);
    =========================
    把这一句取消了,再中和他们的意思.再运行哈,你就明白了