Как я могу проверить, существует ли переменная в 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
, так как это примитив, а не ссылка. int
s инициализируются в ноль в 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();
}
Примитивные типы нельзя сравнивать с нулем.
Вы можете проверить, если число if > 0, чтобы увидеть, существует ли значение:
if(inv[0] <= 0)
{
inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}