public class Three3_3

               static int x1 = 4 ;
       int x2 = 5 ;
public static void main(String args[])
{
 Three3_3 obj1 = new Three3_3() ;
 Three3_3 obj2 = new Three3_3() ;
 obj1.x1 = obj1.x1 + 2 ;
 obj1.x2 = obj1.x2 + 4 ;
 obj2.x1 = obj2.x1 + 1 ;
 obj2.x2 = obj2.x2 + 6 ;
 System.out.println("obj.x1 = " + obj1.x1) ;
 System.out.println("obj2.x2 =" + obj1.x2) ;
 System.out.println("obj2.x2 =" + obj2.x2) ;
 System.out.println("Three3_3.x1 =" + Three3_3.x1) ;
}
}运行的结果怎么是:
obj.x1 = 7
obj2.x2 =9
obj2.x2 =11
Three3_3.x1 =7怎么不是这样的呢?
obj.x1 = 2
obj2.x2 =9
obj2.x2 =11
Three3_3.x1 =7哪位帮解释一下!!!!

解决方案 »

  1.   

    还有:  public class Three3-3{
             int x ;
    public Three3_32(int x1)
        {
           x = x1 ;
        }
    public static void main(String args[])
    {
    Three3_32 m1 = new Three3_32(4) ;
    Three3_32 m2 = new Three3_32(4) ;
    Three3_32 m3 = m2 ;
    m3.x = 6 ;
    System.out.println("m1 = m2 is" + (m1 == m2)) ;
    System.out.println("m2 = m3 is" + (m2 == m3)) ;
    System.out.println("m1.x == m2.x is" + (m1.x == m2.x)) ;
    }运行结果为:m1 = m2 isfalse
    m2 = m3 istrue
    m1.x == m2.x isfalse
    理由???
      

  2.   

    class Three3-33
    {
             static int x = 5 ;
    static {x += 10 ;}

    public static void main(String args[])
    {
    System.out.println("x = " + x);
    }

    static { x = x-5 ;}
    }运行结果是 : 10 ;
    有点模糊!!
      

  3.   

    1、static int x1=4是所有Three3_3对象共享
    obj1.x1 = obj1.x1 + 2 ;//obj1.x1==obj2.x1=4+2=6
     obj1.x2 = obj1.x2 + 4 ;//obj1.x2=5+4=9
     obj2.x1 = obj2.x1 + 1 ;//obj2.x1=6+1=7,Three3_3.x1=7
     obj2.x2 = obj2.x2 + 6 ;//obj2.x2=5+6=11
      

  4.   

    2、
    m1和m2是2个不同的Three3_32对象m1 == m2为f
    m2的引用副给m3,m3也指向m2,m2 == m3 为T
    由于m2和m3指向同一个对象,m3.x = 6改变了m2.x的值m1.x == m2.x为F
    3、初始化顺序
    x=5,x+=10->x=15,x=x-5->x=10
      

  5.   

    <<Think in Java>> 第三版
    47页有对你这个问题介绍
    在附录A有解释.
    当一个陷阱...
      

  6.   

    第2题就是==与eaual()的区别,
    首地址不同