Java существует ли переменная

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

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

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

9 ответов

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

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

Имеет в точности то же содержимое, что и:

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

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

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

Это не совсем правильно. Примитив int инициализируется нулем, только если он имеет область видимости класса. Целое число, объявленное в методе (или в более узкой области), остается неинициализированным.

@Paul, новый массив значений int будет равен нулю. Чтобы быть точным в отношении обычных локальных переменных типа int, их необходимо инициализировать перед использованием в соответствии с правилами Определенное назначение. Компилятор Java предотвратит компиляцию неинициализированных перед использованием локальных переменных.

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

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

Если только 0 не является допустимым значением для него. Он должен явно инициализировать массив значением, которое, как он знает, недопустимо.

Примитив не может иметь значение NULL в Java.

Что ж . int — примитивный тип. Это не может быть нулевым.

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

Int [] arr = новый int [10]; System.out.println (arr.size ());

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

Если вы хотите иметь «разреженный массив», аналогичный тому, который используется в PHP или JavaScript, вам понадобится Map :

Map map = new HashMap(); map.put( 1, 324 ); if( map.get( 2 ) == null ) . 

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

Integer[] inv = new Integer[10]; inv[0] = 1; inv[1] = 2; . if(inv[3] == null)

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

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

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

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

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

ОП размещает плитки на сетке, или, по крайней мере, так кажется. (0,0) находится в верхнем левом углу сетки, поэтому все точки положительные. Так что да -3 технически является значением, просто недействительным для этого.

Поэтому inv — это массив, предназначенный для хранения tileid для определенного местоположения. Я не вижу ничего, говорящего о том, что -3 не может быть идентификатором плитки.

Источник

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

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

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

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

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

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

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

@Paul, новый массив значений int будет равен нулю. Чтобы быть точным в отношении обычных локальных переменных типа int, их необходимо инициализировать перед использованием в соответствии с правилами определенного присваивания . Java-компилятор предотвратит компиляцию неинициализированных перед использованием локальных переменных.

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

Если 0 не является допустимым значением для него. Он должен явно инициализировать массив к значению, которое он знает, недопустимо.

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

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

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

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

В Java примитив не может быть пустым.

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

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

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

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

Если вы хотите иметь «разреженный массив», похожий на PHP или JavaScript, вам понадобится Map :

Map map = new HashMap(); map.put( 1, 324 ); if( map.get( 2 ) == null ) . 

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

Integer[] inv = new Integer[10]; inv[0] = 1; inv[1] = 2; . if(inv[3] == null)

Источник

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

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

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

9 ответов

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

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

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

Теперь, если вы использовали 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 map = new HashMap(); map.put( 1, 324 ); if( map.get( 2 ) == null ) . 

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

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

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

Источник

Как проверить переменную инициализируется или нет в Java?

Я возился с каким-то кодом и столкнулся с исключением нулевого указателя, который был результатом неинициализированной переменной. Поэтому мне просто интересно: существует ли способ проверить, существует ли объект на самом деле, прежде чем пытаться его обработать, тем самым избегая такой ошибки?

  1. Если переменная является параметром метода или переменной catch, она, как гарантируется, будет инициализирована, потому что позаботится о семантике Java
  2. Если переменная является локальной переменной, она гарантированно будет инициализирована, потому что компилятор не позволит вам получить доступ к локальной переменной, которая определенно не назначена.
  3. Если переменная является переменной класса ( static ) или экземпляра, то она либо будет явно инициализирована в объявлении, либо инициализирована по умолчанию 1 .

В третьем случае начальное значение по умолчанию равно null для ссылочного типа, ноль для числового типа или false для boolean . Всегда можно проверить, имеет ли переменная это (известное) значение перед его использованием.

ОДНАКО, вы не знаете, имеет ли оно это значение, потому что оно не было инициализировано, или если это значение было явно назначено. Например:

В else случае мы не знаем наверняка, что переменная была инициализирована. Он мог быть явно инициализирован null . Он мог быть инициализирован чем-то другим, а затем присвоен null .

Однако вы, вероятно, просто хотите знать, является ли переменная null или нет. Вы можете определить, что с использованием критерия == null , как указано выше, или другими способами; например, с помощью тернарного оператора или Objects.nonNull (Java 8 и более поздних Objects.nonNull ).

1 – Есть некоторые случаи ребер для переменных класса, где переменная, объявленная с инициализатором, все еще может наблюдаться в исходном состоянии по умолчанию.

Предложение поймать и оправиться от NPE является плохой идеей по ряду причин. Одна из причин заключается в том, что трудно быть уверенным, что вызвало какой-либо данный NPE. (так как это конкретная переменная, с которой вы связаны… или что-то еще? Например:

 SomeClass sc = // may be null try < sc.someMethod(); >catch (NullPointerException ex) < // We don't know for sure if 'sc' was null, or if the NPE // happened within the 'someMethod()' call. >

Короче говоря, этот подход может привести к ошибочным результатам.

Несколько других способов решения проблемы неинициализированных переменных:

Однако ни одна из них не является “бомбоустойчивой” в Java реального мира.

Как определить, была ли инициализирована переменная?

Как обрабатывать еще не инициализированную переменную, другими словами, нулевой объект?

try < // Do something with the object >catch (NullPointerException e)

Просто проверьте с помощью if-предложения, если объект не равен null. Если этот случай был инициализирован. Иначе это еще не было, и также удалить эти избыточные предложения catch catch с помощью NullPointerException, поскольку вы можете легко проверить и избежать нулевых типов объектов.

//your code below, the String object is just an example String text = null; if(text!=null) < //object has been initialized >else < //object has not been initialized >
Object obj //whatever code. if(obj != null) < //obj exists >else < /*Handle the case where object doesn't exist, typically - trying to initialize it, but that not the only case, actually lots of options available.*/>

Однако, если вы знаете какую-либо информацию о типе объекта или о причине, по которой она не была инициализирована, всегда лучше использовать что-то более конкретное. Например, org.apache.commons.lang.StringUtils.isBlank(String str) для строк

Источник

Читайте также:  Php вернуть класс объекта
Оцените статью