是否有机会将对象自动转换为Integer?

big*_*ghi 5 java

我想知道下面的代码是否适用于任何场景?

Object value = attValue.getValue(); // Returns an Object, might contain an Integer
        if (value instanceof Integer) { 
            if (mAccount.getValue() != value) { // mAccount.getValue() return int
               // Do something here
            }
        }
Run Code Online (Sandbox Code Playgroud)

它适用于我的Android工作室,但不适用于其他PC.是什么让它对我有用?

Jon*_*eet 12

是的,这是完全可行的,因为自动装箱的方式可以保证适用于较小的值,并且允许使用较大的值.例如,保证打印为true:

Object x = 5;
Object y = 5;
System.out.println(x == y);
Run Code Online (Sandbox Code Playgroud)

可能打印为true,但不保证:

Object x = 10000;
Object y = 10000;
System.out.println(x == y);
Run Code Online (Sandbox Code Playgroud)

我肯定会尽量不依赖于代码中的这一点,部分是因为虽然保证重用-128到127(包括-128到127)范围内的值(参见JLS 5.1.7),但是一些JVM 可以重用更广泛的范围值可能会导致您对代码产生错误的安全感.

在您的情况下,我们不知道您是否看到平台上的差异(还要记住我们谈论的是Android而不是JVM),或者只是当它"工作"时,盒装的价值很小,当它"不起作用"时它不是.


Ell*_*sch 10

你得到的是同一个Integer实例,因为Java 5有一个整数缓存.由于该缓存,你得到相同的Integer引用(你得到相同的Integer引用,因为它是相同的引用,他们有引用标识 - 这是==测试).链接的Integer缓存文档说(部分)

整数对象在内部缓存,并通过相同的引用对象重用.

这适用于介于-127到+127(最大整数值)范围内的整数值.

此整数缓存仅适用于自动装箱.使用构造函数构建整数对象时,它们不会被缓存.