Null Check создает исключение NullPointerException

1

Иногда бывает, что я написал код для проверки исключения NullPointerException, как показано ниже,

if(str!=null)
{
    doSomething();
} 

и сама нулевая проверка вызывает исключение NUllPointerException.

Как это решить.

Отредактировано: на самом деле этот код получал нулевой указатель,

Map params = new HashMap();
if(params != null && params.get("requestType"))
{
    //some null safe code goes here
}

Позже я понял, что params.get() выбрасывает исключение нулевого указателя.

  • 0
    Можете ли вы опубликовать свой полный код ??
  • 1
    У вас нет кода для «проверки NullPointerException», как вы говорите, но у вас есть код, который проверяет на null . Этот код сам по себе не может генерировать исключение NullPointerException, поэтому проблема должна быть где-то еще в вашем коде, в месте, которое вы еще не опубликовали в SO.
Показать ещё 2 комментария
Теги:
exception
nullpointerexception
null

3 ответа

9
Лучший ответ

Вы, кажется, говорите, что:

if (str != null) {
    doSomething();
}

выбрасывает NullPointerException в сравнении.

Это невозможно Поэтому я ожидаю, что на самом деле происходит одно из следующих действий:

  • Вы неверно истолковали трассировку стека, и NPE там не выбрасывается.

  • Фактический код существенно отличается от иллюстративного примера.

  • Вы не выполняете код, который, по вашему мнению, вы выполняете. Например, вы, возможно, не перекомпилировали его... или вы выполняете устаревшую копию файла .class или .jar.

  • Вам удалось серьезно запутать вашу IDE. (Иногда вы можете получить очень странное поведение от запутанной IDE...)


Единственные ситуации, когда этот код может дать NPE, который не является артефактом чего-то другого, что вы делаете неправильно, - это если у вас поврежденная установка Java (или IDE) или если ваше оборудование неисправно.Я бы обесценил эти объяснения как в основном неправдоподобные.


Обновить

Теперь вы говорите, что:

Map params = new HashMap();
if(params != null && params.get("requestType"))
{
    //some null safe code goes here
}

бросает NPE в params.get. Я должен сказать, что это чепуха.

  1. Код не скомпилируется. params.get не возвращает что-либо boolean или которое может быть автоматически преобразовано в boolean.

  2. Если мы игнорируем ошибки компиляции, то params.get на params.get карте может params.get NPE, только если params равен null. Эта карта ограничена потоками, и предыдущая проверка гарантирует, что params не null.

Мои предыдущие выводы верны. Это невозможно.

Подсказка: это может быть проблема с многопоточностью. Возможно получить прерывистый NPE, если вы обновите HashMap с одним потоком и прочитаете его с другим, и вы не синхронизируете должным образом.

  • 0
    спасибо @Stephen C
  • 0
    недавно я работал над проектом поддержки, этот файл был jsp-файлом, а код, написанный на скриптлете, давал NPE при условии, как указано выше, поэтому задал вопрос, thnx для ответа.
Показать ещё 1 комментарий
1

Вы проверили его правильно, можете объяснить мне сценарий. И это в java. Если это в Java, то вот пример кода, который отлично работает, вы перекрестно проверяете. Если это локальная переменная, она работает нормально.

class string 
{
static String str;
public static void main(String[] args)
{
if(str!=null)
{
System.out.println("hi");
}
else
{
System.out.println("bye");
}
}
} 
  • 1
    Это не имеет отношения к вопросу. Вопрос в том, что str != null создает исключение.
-4

Здесь, как вы описали, исключение nullpointer происходит в программе ur. нулевая проверка дает исключение nullpointer

 if(str!=null)
    {
        doSomething();
    } 

здесь, если у проверить полную программу. здесь только одна вещь идет не так, что здесь str здесь null, поэтому она дает исключение ua nullpointer. PLZ проверить ур программы еще раз......

Ещё вопросы

Сообщество Overcoder
Наверх
Меню