为什么'<','>'使用包装类而'=='不使用?
我知道'=='不适用于[-128,127]范围之外的值,因为在此范围内存在Integer对象的caching,如果值在范围内,则返回相同的引用。 但为什么'>','<','> =','<='即使在范围之外也能给出正确答案?
Integer a=150; Integer b=150; System.out.println(a==b); //returns false Integer a=150; Integer b=150; System.out.println(a>=b); // returns true 为什么发生这种情况?
  < , > , <=和>=运算符仅为基元types定义。 因此,在包装types上使用它们会导致编译器将对象拆箱为原语。 
意即
 System.out.println(a>=b); 
相当于
 System.out.println(a.intValue()>=b.intValue()); 
 但是,对于基本types和引用types,都存在==和!=运算符,因此使用它们来比较基本包装types的两个对象会比较引用而不是它们所包装的基本值。 
  Holger评论说,在引入自动装箱和自动拆箱之前,在Java语言中存在==和!=的对象引用的比较,但是之前的任何引用types都不支持与< , > , <=和>=进行比较自动拆箱被引入。 
 这意味着在Java的早期,你的代码片段的a>=b不能通过编译(因为a和b不是原始的数字types)。 另一方面,你的a==b片段仍然会通过编译并返回false 。 
 对于恰好是数字基元包装的引用types,改变==和!=的行为会改变现有代码的行为,从而破坏向后兼容性,这可能是未完成的原因。