将int赋给Integer

时间:2011-11-04 10:49:31

标签: android nullpointerexception

我定义了一个类(作为c中宏的替代)

public class Constants {

    public static final int i1 = 1;
    public static final int i2 = 2; 
    }

另一个“全局变量”类

public class GlobalVars {
    public static Integer gi1;
    public static Integer gi2;
}

我这样指定:

GlobalsVars.gi1 = Constants.i1;

虽然我没有得到任何编译器警告并且它在1000个测试用例中有效,但是在特殊情况下这是否可能导致GlobalVars.gi1变为空 - 比如在运行各种版本的某些Android设备上?

编辑:

我这样比较:

if (GlobalVars.gi1 == Constants.i1)

这是发生NullPointerException错误的地方

2 个答案:

答案 0 :(得分:2)

这在所有情况下都能正常工作。它使用称为autoboxing的Java语言的特性来执行从Integer对象到int原语的转换。 http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

运行哪个版本的Android并不重要。

答案 1 :(得分:2)

代码应该在所有当前设备上正常运行。

至少有一个问题:

不建议在Android上使用静态全局变量。没有规范如何处理静态类变量。

这意味着有可能在某些时候如果设备需要非常大的内存,那么如果应用程序被带回到前台,则整个应用程序将从内存中删除所有活动将从已保存的实例状态重建,但是知道你不能依赖你的静态变量仍然可用。这不是int和Integer的问题。如果从内存中删除了应用程序并且在重新创建应用程序后再次加载所有类,则静态变量的持久性存在问题。