Java 类型,值比较

Java Type, Value comparison

我想看看 Java 中某些类型的真实性 table。

而且我无法理解第一个 returns 正确和下面一个错误?

public class CompareTypes{

    public static void main(String[] args){

        // -------------------------------------
        Integer AA = 12;
        Integer BB = 12;
        System.out.println( AA == BB ); // true

        // -------------------------------------
        Integer a = 128;
        Integer b = 128;
        System.out.println( a == b ); // false


    }

}

您看到的是自动装箱的产物。

Integer 个对象具有不同的对象 ID,这意味着两个不同的 Integer 个对象对于 == 将是 false。但是,valueOf 方法缓存了 Integer 对象的前 127 个值。当您通过其 valueOf 静态工厂在 -128 和 +127 之间创建一个 Integer 时,您将获得完全相同的对象。当您创建一个值 >= 128 的对象时,您每次都会得到一个全新的对象,具有不同的 ID,因此不会直观地响应 == 调用。

自动装箱使用 valueOf 方法进行自动装箱,这就是为什么从 int 个小于 128 的字面量创建为 Integer 个对象的对象引用起作用的原因。但是,创建两个 Integer 个值为 128 的对象的行创建了两个不同的对象。

这个故事的寓意是

  • 尝试对值类型使用 .equals()
  • 注意不要混淆文字类型和盒装类型。

https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof