Macht java zu definieren, als string null-terminiert?
Wie mein Titel schon sagt, es ist eine theoretische Frage. Ich würde gerne wissen, dass wenn java definiert als string null-terminiert ist.
- so wie Sie verfolgen string-Ende? Mit der Länge?
- Wollte nicht sehen, dass die Frage, obwohl bei google eine Suche bevor. Kann ein Duplikat!
- Dewsworld, die besagt, es ist eine theoretische Frage ist fast ein dead-cert Grund für die Schliessung. SO soll für die tatsächlichen Probleme, denen Sie begegnen.
- Diese Frage ist eigentlich um etwas anderes. Es hat einen irreführenden Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Ein String ist definiert als eine Feste Länge, Reihenfolge der
char
Werte. Alle möglichenchar
Werte (von 0 bis 65535) verwendet werden können, in einen String. Es gibt keine "ausgezeichnete" Wert, der bedeutet, dass der string endet.Ja. Ein
String
Objekt hat ein eigeneslength
Feld (in allen Implementierungen, die ich geprüft habe ...).Wenn Sie möchten, um mehr darüber zu verstehen, wie die Java-strings implementiert werden, der source-code für die verschiedenen Versionen, die online verfügbar ist. Google nach "java".lang.String source".
Java-strings sind nicht beendet mit einem null-Zeichen wie in C oder C++. Obwohl java strings intern verwendet das char-array, aber es wird keine abschließende null ist. Die String-Klasse bietet eine Methode namens length die Anzahl der Zeichen in der Zeichenfolge.
Ist hier der einfache code und dessen debugger Inhalt:
Debugger screenshot:
[5] = '\0'
Linie ins.value
.Spielt es eine Rolle?
Wenn Sie konvertieren ein Java string in eine Art serialisierte format (auf Diskette, Netzwerk, etc.), dann alles, was zählt, ist das Serialisierungsformat, nicht die JVM-internen format.
Wenn Sie Lesen der string-Daten in C-code über JNI, dann werden Sie nie Lesen Sie die Daten direkt, Sie immer JNI-Funktionen wie
GetStringChars()
oderGetStringUTFChars()
.GetStringChars()
ist nicht dokumentiert, wie die Rückgabe von null-terminierte Daten, so sollten Sie nicht davon ausgehen, dass es null-terminiert—Sie müssen verwenden SieGetStringLength()
bestimmen seine Länge. Ebenfalls mitGetStringUTFChars()
verwenden, müssen SieGetStringUTF8Length()
zu bestimmen, dessen Länge in modifizierte UTF-8-format.NUL
Zeichen in eineString
. Allerdings, wenn Sie tun, dass es fraglich ist, dass Sie mitString
falsch ... weil einNUL
Charakter sollte nicht angezeigt werden in echte text. (Aber ich akzeptiere, dass es Anwendungsfälle gibt, wo Sie möchten, um zu ermöglichenNUL
imString
sowieso.)