Как я могу проверить, существует ли переменная в Java? - PullRequest
5 голосов
/ 22 июля 2011

Я хочу записать в переменную, только если там ничего нет.Вот мой код.

if (inv[0] == null) {
    inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}

Это дает мне эту ошибку:

java.lang.Error: Unresolved compilation problem: 
The operator == is undefined for the argument type(s) int, null

Ответы [ 9 ]

9 голосов
/ 22 июля 2011

inv - это int[], а int не может быть null, поскольку это примитив , а не ссылка.
int s инициализируются в ноль в Java.

5 голосов
/ 22 июля 2011

Я предполагаю, что inv - это int[].

Нет такого понятия, как значение "существующее" или нет в массиве. Например:

int[] x = new int[5];

имеет точно такое же содержимое, как:

int[] x = new int[5];
x[3] = 0;

Теперь, если вы использовали Integer[], вы могли бы использовать нулевое значение, чтобы указать "не заселенный" ... это то, что вы хотите?

Массивы всегда заполняются значением по умолчанию для типа элемента, с которого начинается, - null в случае ссылочных типов, таких как Integer.

2 голосов
/ 22 июля 2011

Я предполагаю из сообщения об ошибке, что inv[] это массив int, а int в java не является объектом, поэтому он не может иметь значение null. Вы должны сравнить его с 0 (значение по умолчанию для каждого индекса пустого массива int) ..

2 голосов
/ 22 июля 2011

Я так понимаю, что inv - это int[]. Вы не можете сравнить int с null, null относится только к ссылочным типам, а не к примитивам. Вместо этого вам нужно либо присвоить ему какое-нибудь значение флага (популярность 0 и значение, которое будет иметь его по умолчанию при создании массива), либо вместо него сделать inv Integer[] (Integer, являющийся ссылочный тип, null -able).

0 голосов
/ 22 июля 2011

Ошибка в том, что inv - это массив int, а не объектная оболочка Integer. Ваш массив все равно инициализируется для вас. Если вы написали

int[] inv = new int[5];

у вас будет массив из 5 нулей.

Вы должны инициализировать свой массив, используя какое-то значение, которое, как вы знаете, является недействительным (например, если у вас есть массив возрастов, отрицательное значение будет недействительным). Проверьте наличие недопустимого значения и, если оно есть, замените его.

0 голосов
/ 22 июля 2011

Вы можете попробовать что-то вроде этого

Integer[] inv = new Integer[10];
inv[0] = 1;
inv[1] = 2;
    ....

if(inv[3] == null)
{
    inv[3] = getSomeValue();
}
0 голосов
/ 22 июля 2011

Ну ... int - это примитивный тип.Это не может быть нулем.

Вы можете проверить размер массива:

int [] arr = new int [10];System.out.println (arr.size ());

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

Если вы хотитеиметь "разреженный массив", похожий на то, что PHP или JavaScript, вам нужно Map:

Map<Integer, Integer> map = new HashMap();
map.put( 1, 324 );
if( map.get( 2 ) == null ) ...
0 голосов
/ 22 июля 2011

примитивные типы нельзя сравнивать с нулем.

Вы можете проверить число, если> 0, чтобы увидеть, существует ли значение:

if(inv[0] <= 0)
{
    inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}
0 голосов
/ 22 июля 2011

Примитив не может быть нулевым в Java.

...