Как я могу создать строку, которая может пройти нулевую проверку, но выдаст исключение нулевого указателя при вызове strJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу создать строку, которая может пройти нулевую проверку, но выдаст исключение нулевого указателя при вызове str

Сообщение Anonymous »

В программе с jdk1.8 я встретил довольно странный случай:
когда я получил исключение нулевого указателя в методе String.length (который находится в методе StringBuilder.append()),
точная позиция исключения нулевого указателя находится здесь, в строке jdk,

Код: Выделить всё

public int length() {
return value.length;  //line 623
}
и он вызывается в классе AbstractStringBuilder:

Код: Выделить всё

public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();  //here line 447
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
Я не могу понять, как это может произойти, поскольку перед вызовом str.length() выполняется проверка на нулевое значение.
И, возможно, из-за по той же причине, когда я пытался напечатать содержимое строки, произошел сбой, поэтому я не могу понять, какое содержимое строки вызвало это.
Теперь я хочу знать, что может вызвать это, могу ли я создать строковое содержимое, чтобы воспроизвести это? Спасибо за любые идеи.
stacktrace

Код: Выделить всё

java.lang.NullPointerException
at java.lang.String.length(String.java:623)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:447)
at java.lang.StringBuilder.append(StringBuilder.java:141)
at ....toString(....java:14)  //a toString method of some class
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at com
Я получил это в обеих средах:

версия Java "1.8.0_102" Java(TM) SE Среда выполнения (сборка
1.8.0_102-b14) Java HotSpot(TM) 64-разрядная серверная виртуальная машина (сборка 25.102-b14, смешанный режим)

и

openjdk версии "1.8.0_345" Среда выполнения OpenJDK
(Темурин) (сборка 1.8.0_345-b01) OpenJDK 64-разрядная версия Серверная ВМ
(Темурин)(сборка 25.345-b01, смешанный режим)


Подробнее здесь: https://stackoverflow.com/questions/787 ... pointer-ex
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»