присваивание int для Integer - PullRequest
0 голосов
/ 04 ноября 2011

Я определил класс (как замену макросов в 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, работающих под управлением различных версий?

EDIT:

Я сравниваю вот так:

if (GlobalVars.gi1 == Constants.i1)

и здесь произошла ошибка NullPointerException

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Код ДОЛЖЕН отлично работать на всех современных устройствах.

Существует как минимум одна проблема с этим:

Использование статических глобальных переменных на Android не рекомендуется. Нет никакой спецификации, как обрабатываются статические переменные класса.

Это означает, что возможно, что в какой-то момент, если устройству потребуется очень много памяти, все ваше приложение будет удалено из памяти, если приложение затем вернется на передний план, все действия будут перестроены из состояния сохраненного экземпляра, но вы знаете не может полагаться на то, что ваши статические переменные все еще доступны. Это не проблема с int и Integer. Это проблема с сохранением статических переменных, если ваше приложение удаляется из памяти, и все ваши классы загружаются снова, как только приложение обновляется.

2 голосов
/ 04 ноября 2011

Это будет хорошо работать во всех случаях. Он использует функцию языка Java, которая называется autoboxing, для преобразования объекта Integer в примитив int. http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

Неважно, на какой версии Android вы работаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...