2013-08-24 3 views
9

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

+0

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

+0

Не видел этот вопрос, хотя искал Google раньше. Может быть дубликат! – Dewsworld

+0

Dewsworld, заявив, что это теоретический вопрос, является почти мертвой причиной для закрытия. Предполагается, что SO предназначается для реальных проблем, с которыми вы сталкиваетесь. – paxdiablo

ответ

5

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

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

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

Debugger скриншот:

enter image description here

+1

Есть ли у вас аргументы в поддержку вашего ответа? –

+0

@Juned Ahsan, не могли бы вы немного объяснить :) – Dewsworld

+0

Спецификация java не упоминает об этом, но если вы запустите свой код в режиме отладки, вы можете увидеть содержимое внутреннего массива String, и не будет завершающего нулевого символа , –

1

ли это важно?

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

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

+3

«Это имеет значение?» Умм ... приятно знать, как работают компьютеры. – citelao

+1

Неважно, если вы беспокоитесь о том, что произойдет, если вы поместите символ «NUL» в строку «String». Однако, если вы это делаете, возможно, что вы используете 'String' неправильно ... потому что символ' NUL' не должен отображаться в * реальном * тексте. (Но я согласен с тем, что есть варианты использования, в которых вы хотите разрешить 'NUL' в' String' в любом случае.) –

7

Я хотел бы знать, что если java определяет строку как null-terminated.

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

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

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

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

Смежные вопросы