Java类型,值比较

时间:2016-07-24 00:23:08

标签: java types comparison

我试图查看Java中某些Type的真实表格。

我无法理解前一个返回true而一个下面是假的?

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


    }

}

1 个答案:

答案 0 :(得分:1)

你看到了一个自动装箱的神器。

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

Autoboxing使用valueOf方法进行自动装箱,这就是为什么对象引用创建为Integer对象来自int个小于128的文字。但是,创建两个值为128的Integer个对象的行会创建两个不同的对象。

故事的寓意是

  • 尝试将.equals()用于值类型
  • 注意混合文字类型和盒装类型。

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