私のタイトルが示すように、これは理論的な質問です。Javaが文字列をnull終端として定義しているかどうかを知りたいです。
3 に答える
Java 文字列は、C または C++ のようにヌル文字で終了しません。Java 文字列は内部的に char 配列を使用しますが、その中に終端の null はありません。String クラスには、文字列の文字数を知るために length というメソッドが用意されています。
簡単なコードとそのデバッガーの内容は次のとおりです。
public static void main(String[] args) {
String s = "Juned";
System.out.println(s);
}
デバッガーのスクリーンショット:
それは問題ですか?
Java 文字列をある種のシリアル化された形式 (ディスク、ネットワークなど) に変換する場合、重要なのはシリアル化形式であり、JVM の内部形式ではありません。
JNI を介して C コードで文字列のデータを読み取る場合、データを直接読み取ることはなく、常にGetStringChars()
や などの JNI 関数を使用しますGetStringUTFChars()
。 GetStringChars()
は null で終わるデータを返すとは文書化されていないため、null で終わると想定しないでくださいGetStringLength()
。長さを決定するには、 を使用する必要があります。同様にGetStringUTFChars()
、 を使用して、変更された UTF-8 形式GetStringUTF8Length()
での長さを決定する必要があります。