Определяет ли java строку с нулевым завершением?

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

Ответ 1

Я хотел бы знать, что если java определяет строку как завершающую нуль.

Нет. Строка определяется как последовательность фиксированной длины значений char. Все возможные значения char (от 0 до 65535) могут использоваться в String. Нет "выделенного" значения, которое означает, что строка заканчивается.

Итак, как они отслеживают завершение строки? Использование длины?

Да. Объект String имеет частное поле length (во всех реализациях, которые я изучил...).

Если вы хотите больше узнать о том, как реализованы строки Java, исходный код для различных версий доступен в Интернете. Google для "источника java.lang.String".

Ответ 2

Строки Java не заканчиваются нулевыми символами, как на C или С++. Хотя java-строки используют внутренне массив char, но в этом нет никакого оконечного нуля. Класс String предоставляет метод, называемый длиной, чтобы узнать количество символов в строке.

Вот простой код и его содержимое отладчика:

public static void main(String[] args) {
    String s = "Juned";
    System.out.println(s);
}

Снимок экрана отладчика:

enter image description here

Ответ 3

Это имеет значение?

Если вы преобразуете строку Java в какой-то сериализованный формат (на диск, в сеть и т.д.), тогда все, что имеет значение, это формат сериализации, а не внутренний формат JVM.

Если вы читаете строковые данные в C-коде через JNI, вы никогда не читаете данные напрямую, вы всегда используете JNI-функции, такие как GetStringChars() или GetStringUTFChars(). GetStringChars() не документируется как возвращающий данные с нулевым завершением, поэтому вы не должны предполагать, что оно завершено с нулевой отметкой - вы должны использовать GetStringLength() для определения его длины. Аналогично GetStringUTFChars(), вы должны использовать GetStringUTF8Length(), чтобы определить его длину в измененном формате UTF-8.