public class A  {
    private b a;
    public A(b a){
        this.a=a;        
    }    public static void main(String[] args) {
        b s=new b(3);
        A ss=new A(s);
        A sss=new A(s);
        System.out.println(sss.a.i);
        System.out.println(ss.i==sss.i);
        ss.a.i++;
        System.out.println(ss.i==sss.i);
        System.out.println(sss.a.i);
        
    }}
class b{
    int i;
    public b(int i){
        this.i=i;
    }
}
**********************************************public class A  {
private Integer i;

public A(int i){
this.i=i;
} public static void main(String[] args) {
//Integer s=new Integer(3);
Integer s=new Integer(12222);
A ss=new A(s);
A sss=new A(s);
System.out.println(sss.i);
System.out.println(ss.i==sss.i);
ss.i++;
System.out.println(ss.i==sss.i);
System.out.println(sss.i);
System.out.println(ss.i);
}
}

解决方案 »

  1.   

     
    public class A  {
    private int i;

    public A(int i){
    this.i=i;
    } public static void main(String[] args) {
    int s=12222;
    //Integer s=new Integer(12222);
    A ss=new A(s);
    A sss=new A(s);
    System.out.println(sss.i);
    System.out.println(ss.i==sss.i);//为什么这里是true,而上面new出来的s这里却是false,我理解这个s都是分配在栈上的引用,指向堆上的对象,为什么上面new出来的s这里是false.
    ss.i++;
    System.out.println(ss.i==sss.i);
    System.out.println(sss.i);
    System.out.println(ss.i);
    }
    }
      
      

  2.   

    又试了下 ,好像是跟private int i;还是private Integer i;这句有关,具体还是不明白,好像越搞越糊涂了 ,向大家请教下
      

  3.   

    我没有跑你的代码,不过按照我的理解是这样的:int是数据类型,integer是对象如果A里面i是对象,那么构造A的时候,你传入的是对象s的引用,所以A.i是和s一样的对象引用。所以你构造2个,这2个i指的都是同一个对象。但是数据类型int就不一样了。用int构造A,
       ss.i==sss.i是不同的对象ss和sss各自内部的属性了。
      

  4.   

    如果是int那么==是比较值相等。如果是对象,那么==比较的是该对象的内存地址是否相等。
    Integer是int的封装类,很明显==是比较这两个Integer的内存地址是否相等。由于
    构造函数是public A(int i)的,而传入的参数是Integer的,所以会自动拆箱把Integer变成int型的,再是把int赋给Integer类型的变量,所有又需要自动装箱,那很明显A对象中的这个i就不是原来传进来的那个对象了。所以ss.i==sss.i会是false,(但是由于Integer内部是缓存了-128~127的数的,所有如果你new Integer(-128~127)也会返回true)。public class A  {
        private Integer i;
        
        public A(Integer i){//你可以这样修改
            this.i=i;        
        }    public static void main(String[] args) {
            //Integer s=new Integer(3);
            Integer s=new Integer(12222);
            A ss=new A(s);
            A sss=new A(s);
            System.out.println(sss.i);
            System.out.println(ss.i==sss.i);
            ss.i++;
            System.out.println(ss.i==sss.i);
            System.out.println(sss.i);
            System.out.println(ss.i);
        }
    }
      

  5.   

    java参数都是传值引用,不知道你懂“传值”这个意思不’