public class AandB
{
 public static void main(String[] args)
 {
  Integer a=new Integer(5);
  Integer b=new Integer(5);
  
  if(a>=b&&b>=a&&a!=b)
  {
   System.out.println("通过!");
  }
 }
}
为什么a>=b&&b>=a&&a!=b为真??

解决方案 »

  1.   

    FROM: http://xiaoych.javaeye.com/blog/147279
    //对比一下反编译的源代码://Java代码 
    int value = 100;   
    Integer a = Integer.valueOf(value);   
    Integer b = Integer.valueOf(value);   
    System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());   
    int value = 300;   
    Integer a = Integer.valueOf(value);   
    Integer b = Integer.valueOf(value);   
    System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());  int value = 100;
    Integer a = Integer.valueOf(value);
    Integer b = Integer.valueOf(value);
    System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());
    int value = 300;
    Integer a = Integer.valueOf(value);
    Integer b = Integer.valueOf(value);
    System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());//看看JDK5的源代码: 
    //Java代码 
    public static Integer valueOf(int i) {   
    final int offset = 128;   
    if (i >= -128 && i <= 127) { // must cache    
        return IntegerCache.cache[i + offset];   
    }   
    return new Integer(i);   
    }  請繼續
      

  2.   

    import java.io.PrintStream;public class CompareAction
    {    public CompareAction()
        {
        }    public static void main(String args[])
        {
            Integer a = new Integer(5);
            Integer b = new Integer(5);
            if(a.intValue() >= b.intValue() && b.intValue() >= a.intValue() && a != b)
            {
                System.out.println("\u901A\u8FC7!");
            }
        }
    }唯独没重载=  !=  这个在类对象存在的情况下,调用 hashcode 和 equal 方法来断定
      

  3.   

    a>=b是比较a,b的值
    b>=a也是比较a,b的值
    a!=b默认是不是同一个对象,你没有重写object的equal,hashcode方法的话,所以a,b是两个对象,指向不同的hashcode,所以不相同!所以  a>=b&&b>=a&&a!=b 结果为true.
      

  4.   

    楼上的几位有道理,但是你看清楚楼主的问题:
    不是
    Integer a = 256;
    Integer b = 256;
    或者
    Integer a = 56;
    Integer b = 56;然后 a == b的问题。所以1楼的东西答非所问。
    楼主的问题
    Integer a = new Integer(5);
    Integer b = new Integer(5);
    a >= b 成立是因为 a.intValue() >= b.intValue()成立
    同样 a <= b也是这个原因。
    最后一个 a != b,是比较两个对象的地址,显然你 new 了两个对象,肯定不一样了!
      

  5.   

    同意楼上的!
       因为LZ你new出来的是对象,
      对象是通过地址来比较的,每个对象地址都不同
      所以a!=b  成立
      

  6.   

    Integer 是对象,a!=b比较的是地址,当然不一样了啊
      

  7.   

    a>=b和b>=a都是比较两个整数的值大小
    因为a和b都是new出来的,两个对象在堆中的位置根本就不同,所以引用a和引用b的值肯定就不同了啊