Иногда бывает, что я написал код для проверки исключения NullPointerException, как показано ниже,
if(str!=null)
{
doSomething();
}
и сама нулевая проверка вызывает исключение NUllPointerException.
Как это решить.
Отредактировано: на самом деле этот код получал нулевой указатель,
Map params = new HashMap();
if(params != null && params.get("requestType"))
{
//some null safe code goes here
}
Позже я понял, что params.get() выбрасывает исключение нулевого указателя.
Вы, кажется, говорите, что:
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
. Я должен сказать, что это чепуха.
Код не скомпилируется. params.get
не возвращает что-либо boolean
или которое может быть автоматически преобразовано в boolean
.
Если мы игнорируем ошибки компиляции, то params.get
на params.get
карте может params.get
NPE, только если params
равен null
. Эта карта ограничена потоками, и предыдущая проверка гарантирует, что params
не null
.
Мои предыдущие выводы верны. Это невозможно.
Подсказка: это может быть проблема с многопоточностью. Возможно получить прерывистый NPE, если вы обновите HashMap
с одним потоком и прочитаете его с другим, и вы не синхронизируете должным образом.
Вы проверили его правильно, можете объяснить мне сценарий. И это в 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");
}
}
}
str != null
создает исключение.
Здесь, как вы описали, исключение nullpointer происходит в программе ur. нулевая проверка дает исключение nullpointer
if(str!=null)
{
doSomething();
}
здесь, если у проверить полную программу. здесь только одна вещь идет не так, что здесь str здесь null, поэтому она дает исключение ua nullpointer. PLZ проверить ур программы еще раз......
null
. Этот код сам по себе не может генерировать исключение NullPointerException, поэтому проблема должна быть где-то еще в вашем коде, в месте, которое вы еще не опубликовали в SO.