Рассмотрим приведенный ниже код:
String s = null;
s.toLowerCase();
Он выбрасывает NPE:
Исключение в потоке "main" java.lang.NullPointerException
на pracJava1.Prac.main(Prac.java:7)
Возникает вопрос: почему JVM также не может передать сообщение помощника:
Исключение в потоке "main" java.lang.NullPointerException. Попытка
toLowerCase() on null
Это полезно в таких случаях, как obj.setName(s.toLowerCase())
, где номера строк недостаточно, чтобы угадать, было ли значение obj
равно null или s
.
О возможности его использования, посмотрим на генерируемый байт:
stack=1, locals=2, args_size=1
0: aconst_null
1: astore_1
2: aload_1
3: invokevirtual #2 // Method java/lang/String.toLowerCase:()Ljava/lang/String;
Значит, возможно, он знает, имя метода, в котором она пыталась выполнить операцию. Эксперты JVM, каково ваше мнение?