public class Test2 {    public static void main(String[] args) {       Integer i1 = 256;        Integer i2 = 256;        if (i1 == i2)        System.out.println("相等!");        else        System.out.println("不相等!");    }}

解决方案 »

  1.   

    public class Test2 {     public static void main(String[] args) {       Integer i1 = 256;         Integer i2 = 256;         if (i1 .equals( i2))         System.out.println("相等!");         else         System.out.println("不相等!");     } } 
      

  2.   

    是int 不是 Integer 应该  Integer i=new  Integer(256);
      

  3.   

    Integer i1 = 256; 
            Integer i2 = 256; 如果用 ==比较其相等性时,对应的原子数最大是255
      

  4.   

    Integer i1 = 256; 
            Integer i2 = 256; 如果用 ==比较其相等性时,对应的原子数最大是255
      

  5.   


    不用的,JDK 5.0有自动装箱拆箱机制
      

  6.   

    int是一种变量类型! Integer则是一个类,既然是类,就要实例化的,比如 Integer i=new  Integer(256);int的比较用==,而类Integer的比较就要用.equals();
      

  7.   

    如果是
    int i1 = 256; int i2 = 256; 就可以使用i1 == i2 判断;如果是
    Integer i1 = 256; Integer i2 = 256; 则需要使用i1 .equals( i2)判断
      

  8.   

    ==比较的是地址。
    但是Integer缓存了-128至127,所以当数在这个范围内,==返回true.
    public class Test2 {     public static void main(String[] args) {       Integer i1 = 127;         Integer i2 = 127;         if (i1 == i2)         System.out.println("相等!");         else         System.out.println("不相等!");     } }输出相等!
      

  9.   

    对于引用类型“==”比较的是地址,i1和i2值相等,而地址不等。引用类型判断值相等用if (i1 .equals( i2)) 。
      

  10.   

    Intger 的值大于 127时用==会不相等
      

  11.   

    正解,这个Integer比较特殊,对于其他的数字的封装对象就没有这个现象。
      

  12.   

    楼主程序没有问题,运行时不会报错!
    不知道你想证明什么:integer是一个对象,如果你用==来比较俩个Integer对象的话,是可定不会相等的,==比较的是这两个Integer对象的地址,而不是你付给他们的那个值256;
    用int型可以直接==来比较,equals也可以!
      

  13.   

    比较值相等  还是用 equals吧
      

  14.   

    哈哈,今天我刚写了一篇文章分析你遇到的这个问题,贴出来给你们分享,看完了,你就能明白这个问题了我们知道,JDK1.5中,增加了一个新的特性之一,就是自动装包和拆包,是的,正是这个新的特性,使得我们很多程序员在进行原型数据和对象数据类型比较的时候,能够很方便的进行.但是,正是应为这样,我们的问题往往出现在我们难以预料的地方.   很多时候,我们对于数字,比如123和343的比较,都使用数学符号进行比较,比如使用"=="这个比较,这这是没有任何错误的,可是,这样的比较是没有意思,因为我们都知道谁大谁小,我们的比较往往是一些未知的东西,也就是通过变量来进行比较的,如下:      Integer a=100;   Integer b=100;这样,我们比较两个变量a==b,这肯定是成立,我们的很多程序员会很自然的说出,这个结果是正确的,是的,这是没有任何的疑问.但是,如果我们把结果换成下面的形式      Integer a=1232;   Integer b=1232;如果我们再用"=="进行比较,会得到什么样的结果呢?  哈哈,我想,现在可能会有三个答案,正确,错误和不知道,  让我们来分析分析,到底谁的结果是正确的呢?因为上面的是所有结果,我们也就只能从上面选出我们的答案了.  首先,我们要明白,Integer是什么类型的,毫无疑问,是对象类型,但是,对象是需要使用new操作符来完成的啊,也就是 Integer a = new Integer(1232),这样才是我们的对象声明方式.   如果是这样,那么我们应该明白,这个Integer a = new Integer(1232)的含义了,它的工作机制是什么,我们也应该明白吧,如果不明白,那么我们的错误就很难找出来了.   这个实例是有两层意思,一 a只是被声明的应用,没有任何数据,new Integer(1232)就告诉虚拟机,在某个内存地址中,存在了这样一个对象,对象的内容是1232,并且把这个对象放在内存中的某个堆中,a就是得到了这个堆的内存地址应用,而不是对象本身,当我们要使用对象的值的时候,就会通过a这个内存地址找到相应的数据区,然后把拿到这些数据.    而在java中,"=="比较符和equals比较函数,它们比较的内容是不同的;"=="比较符,如果是对原型,int,long,short,char,boolean,byte,double,float这些的数值比较,是不会出现任何疑问的,但是,对于对象就不一样了,"=="比较符,比较对象的时候,比较的是它的两个内存地址,而不是内存地址里面的值.     说到这里,我们有些人会问,上面的比较        Integer a=100;        Integer b=100;    a==b 为什么会成立?比较不是内存地址吗?它们是值相同的两个不同对象啊!   哈哈,这个问题我们就得看看JDK1.5中自动装包和拆包的缘故了.自动装包就是编译器自动的把原型数据转换成对象类型,而java虚拟机根本就不知道这一个过程的变换,java虚拟机只会执行编译器生成的字节码,而编译器把原型编译成的对象到底放在那个位置呢?它们会把数值相同的数据编译成同一个对象存放起来吗?这就是我们解决问题的关键所在.   java编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中,这下,我们就明白了,为什么使用等号比较两个大于127或者小于-128的Integer类型结果是false了吧?   所以,从上面的分析中,我们应该明白,在java的比较中,当我们遇到比较两个对象的值是否相等时,我们应该使用equals这个函数,而不是"=="比较符,equals比较的是两个对象里面的值,也就是就是根据内存地址来找到堆中的数据.      下面,我们再把这几个概念说一下   自动装包:JDK1.5中,java编译器会自动的把原型包装称为对象类型,每一个原型都有自己对应的包装类型.把原型包装成对象类型的过程叫做自动装包.  自动拆包:就是把对象类型的数据转换成原型的过程.    "==":这个比较符比较的是两个原型数据    equals:比较的是两个对象的值,是在对象中使用的,当遇到对象的时候,不需要作为任何考虑,就使用它.     很多会问,我们什么时候使用原型,什么时候使用对象类型,这个问题,需要在实际的开发中来阐述,我在一些开发中就遇到这样的问题,在这里,我就不总结了,如果需要知道的,请告诉我或者在以后的日子中,我会陆续贴出来.
      

  15.   


    ==操作符是比较是否同一对象(底层就是比较内存地址)
    比较内容应该用equal方法
      

  16.   

    谁说的?
    还在用JDK 5.0以下的版本吧?
    不知道5.0加了新特性?
    其中一个就是自动装箱与拆箱
    即:
    Integer i=5;
    int a=i;
    都行
      

  17.   


    但是Integer缓存了-128至127,所以当数在这个范围内,==返回true.原来如此建议用  i1.equals(i2)
    或 i1.intValue() == i2.intValue()
      

  18.   

    最简单的办法,打开你的API看看integer是怎么定义的。就清楚了。
      

  19.   

    Integer 类在对象中包装了一个基本类型 int 的值(-128至127),所以当数在这个范围内,
    ==返回true.超出这个范围则为false 此外:==判断的是地址是否相等,equals判断的是值是否相等
      

  20.   

    为什么会出错,IDE提示我不能将INT转换成Integer
      

  21.   


    public class Test2 {
    public static void main(String[] args) {
    Integer i1 = 256;
    Integer i2 = 256;
    if (i1.equals(i2) )
    System.out.println("相等");
    else
    System.out.println("不相等");
    }
    }
    输出相等public class Test2 {
    public static void main(String[] args) {
    Integer i1 = 256;
    Integer i2 = 256;
    if (i1==i2 )
    System.out.println("相等");
    else
    System.out.println("不相等");
    }
    }输出不等public class Test2 {
    public static void main(String[] args) {
    int i1 = 256;
    int i2 = 256;
    if (i1==i2 )
    System.out.println("相等");
    else
    System.out.println("不相等");
    }
    }输出相等
      

  22.   

    你来比较下这两个程序 的区别:
    (一)Integer i=1;
    Integer j=1;
    if(i==j)
       System.out.println("相等");
    else
       System.out.println("不相等");
    (二)int i=1;
    int j=1;
    if(i==j)
     System.out.println("相等");
    else
       System.out.println("不相等");
    注:(一)我们是定义了一个引用指向对象1,(二)中只是定义了两个变量,赋值为1;
      

  23.   

    你来比较下这两个程序 的区别:
    (一)Integer i=1;
    Integer j=1;
    if(i==j)
       System.out.println("相等");
    else
       System.out.println("不相等");
    (二)int i=1;
    int j=1;
    if(i==j)
     System.out.println("相等");
    else
       System.out.println("不相等");
    注:(一)我们是定义了一个引用指向对象1,(二)中只是定义了两个变量,赋值为1;
      

  24.   

    Integer和String的使用差不多,当他们的对象使用==时,都是引用的对象内存的比较。
    要比较对象的值一般需要equles或者把他们转换成int使用==对比。
      

  25.   

    Integer和String的使用差不多,都是包装类!==是比较值相等,包装类是包装成对象比较大小,所以肯定有问题了!~我们一般比较对象的时候用equals方法
      

  26.   


     public class Test1 {
        public static void main(String[] args) {
             Integer i1 = 256;
             Integer i2 = 256;
           if (i1.equals(i2) )
                System.out.println("相等");
           else
                System.out.println("不相等");
        }
    } 显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
    所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等
     
     public class Test1 {
        public static void main(String[] args) {
             Integer i1 = 256;
             Integer i2 = 256;
           if (i1==i2)
                System.out.println("相等");
           else
                System.out.println("不相等");
        }
    }  结果是不相等的。
     ==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。 public class Test1 {
        public static void main(String[] args) {
             Integer i1 = 127;
             Integer i2 = 127;
           if (i1.equals(i2) )
                System.out.println("相等");
           else
                System.out.println("不相等");
        }
    } 结果是相等的。显然比较的内容相等。
     public class Test1 {
        public static void main(String[] args) {
             Integer i1 = 127;
             Integer i2 = 127;
           if (i1==i2)
                System.out.println("相等");
           else
                System.out.println("不相等");
        }
    }结果是相等的。由于自动装包,它们其实都是装在一个Integer对象中。
    这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
    char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。
      

  27.   

    int是一种变量类型! Integer则是一个类,既然是类,就要实例化的,比如 Integer i=new  Integer(256); int的比较用==,而类Integer的比较就要用.equals(); 
      

  28.   

    == 是判断引用的,equals用来判断值,但也可以通过改写equals来实现自己的判断