文字の配列は String ではありません。どちらも String a ではありませんchar[]
。
JLS では、これらは明確に定義された 2 つの別個のエンティティです。文字列は不変です。配列はそうではありません。
JLS で定義されているように、実際のサイズchar[]
もです。インデックスは常に 0 から始まるため、アクセスできるのはインデックスの場所のみです。5
0-4
への呼び出しはSystem.out.println(foo)
通常foo.toString()
、作業を行うために使用しますがchar[]
、 の場合は少し特殊です。PrintStream
最終的に、クラスにある次のメソッドに委譲します。
private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
したがって、ループによってストリームに出力する必要がある要素の数を正確に認識します。out
最後に (おそらく皮肉なことに)、String
オブジェクトは内部で を使用してchar[]
その値を格納します。配列はその長さを認識しているため、サイズに関する情報を取得するときに配列に委譲します。
private final char value[];
public int length() {
return value.length;
}