Как я могу проверить, существует ли переменная в Java?

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

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 ответов

Решение

Я предполагаю, что inv является int[],

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

int[] x = new int[5];

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

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

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

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

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

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

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

Что ж... 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 ) ...

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

int[] inv = new int[5];

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

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

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

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

if(inv[3] == null)
{
    inv[3] = getSomeValue();
}

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

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

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

if(inv[0] <= 0)
{
    inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}
Другие вопросы по тегам