Как следует из моего названия, это теоретический вопрос. Я хотел бы знать, что если java определяет строку с нулевым завершением.Определяет ли java строку с нулевым завершением?
ответ
Строки Java не заканчиваются нулевыми символами, как на C или C++. Хотя java-строки используют внутренне массив char, но в этом нет никакого завершающего нуля. Класс String предоставляет метод, называемый длиной, чтобы узнать количество символов в строке.
Вот простой код и его содержимое отладочных:
public static void main(String[] args) {
String s = "Juned";
System.out.println(s);
}
Debugger скриншот:
Есть ли у вас аргументы в поддержку вашего ответа? –
@Juned Ahsan, не могли бы вы немного объяснить :) – Dewsworld
Спецификация java не упоминает об этом, но если вы запустите свой код в режиме отладки, вы можете увидеть содержимое внутреннего массива String, и не будет завершающего нулевого символа , –
ли это важно?
Если вы преобразуете строку Java в какой-то сериализованный формат (на диск, в сеть и т. Д.), Тогда все, что имеет значение, это формат сериализации, а не внутренний формат JVM.
Если вы читаете данные строки в коде C через JNI, то вы никогда не читаете данные напрямую, вы всегда используете функции JNI, такие как GetStringChars()
или GetStringUTFChars()
. GetStringChars()
не задокументирован как возвращающий данные с нулевым завершением, поэтому вы не должны предполагать, что он завершен с нулевой отметкой - вы должны использовать GetStringLength()
для определения его длины. Аналогичным образом с GetStringUTFChars()
, вы должны использовать GetStringUTF8Length()
, чтобы определить его длину в modified UTF-8 format.
«Это имеет значение?» Умм ... приятно знать, как работают компьютеры. – citelao
Неважно, если вы беспокоитесь о том, что произойдет, если вы поместите символ «NUL» в строку «String». Однако, если вы это делаете, возможно, что вы используете 'String' неправильно ... потому что символ' NUL' не должен отображаться в * реальном * тексте. (Но я согласен с тем, что есть варианты использования, в которых вы хотите разрешить 'NUL' в' String' в любом случае.) –
Я хотел бы знать, что если java определяет строку как null-terminated.
No. A Строка определяется как последовательность с фиксированной длиной char
. Все возможные значения char
(от 0 до 65535) могут использоваться в строке. Нет «выделенного» значения, что означает, что строка заканчивается.
Итак, как они отслеживают последовательность строк? Использование длины?
Да. Объект String
имеет приватное поле length
(во всех реализациях, которые я изучил ...).
Если вы хотите больше узнать о том, как реализованы строки Java, исходный код для различных версий доступен в Интернете. Google для "java.lang.String source".
- 1. Почему HttpWebResponse возвращает строку с нулевым завершением?
- 2. Как сделать строку c с нулевым завершением?
- 3. напечатать строку с нулевым завершением в windbg
- 4. Java BufferedReader для строк с нулевым завершением
- 5. Двойная строка с нулевым завершением
- 6. Строка с нулевым завершением
- 7. Как напечатать строку с нулевым завершением с помощью printf?
- 8. Что такое строка с нулевым завершением?
- 9. Как преобразовать массив символов с нулевым завершением в строку?
- 10. Получение строки с нулевым завершением из System.Text.Encoding.Unicode.GetString
- 11. Преобразование строки с нулевым завершением в строку D
- 12. Преобразование потока памяти с нулевым завершением в строку unicode
- 13. Когда функция GetByteArrayElements JNI возвращает строку с нулевым завершением?
- 14. Получите длину строки, содержащей строку с нулевым завершением
- 15. Как получить строку с нулевым завершением из строки C#?
- 16. Как скопировать строку с нулевым завершением в динамическую память
- 17. C++, boost asio, получить строку с нулевым завершением
- 18. C++ Объединение двух строк с нулевым завершением?
- 19. Эвристика при анализе строки с нулевым завершением
- 20. Эффективно преобразовать строку Java в конец с нулевым завершением byte [], представляющий строку C? (ASCII)
- 21. String не является ошибкой с нулевым завершением
- 22. strlen() для строки символов с нулевым завершением?
- 23. Массив с нулевым завершением в C++
- 24. QVariant ожидает QByteArray с нулевым завершением?
- 25. проверить, если const char * с нулевым завершением
- 26. Сравнение строки с нулевым завершающим символом в строку с нулевым завершением
- 27. Проверка действительности строки с нулевым завершением
- 28. JavaScript WebSocket строки с нулевым завершением
- 29. Сравнение массивов символов с нулевым завершением
- 30. Инициализация статических многомерных массивов с нулевым завершением
@Reimeus, так как они отслеживают последовательность строк? Использование длины? – Dewsworld
Не видел этот вопрос, хотя искал Google раньше. Может быть дубликат! – Dewsworld
Dewsworld, заявив, что это теоретический вопрос, является почти мертвой причиной для закрытия. Предполагается, что SO предназначается для реальных проблем, с которыми вы сталкиваетесь. – paxdiablo