字符数组不是字符串。字符串 a 也不是char[]
。
在 JLS 看来,它们是两个独立的、定义明确的实体。字符串是不可变的;数组不是.
您的实际大小char[]
也是由 JLS 定义5
的。由于索引始终从零开始,因此您只能访问索引位置。0-4
调用System.out.println(foo)
通常用于foo.toString()
完成工作,但对于 achar[]
来说,它有点特别。它最终委托给类中的这个方法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[]
在幕后使用 a 来存储它的值。由于数组知道它的长度,它在提取有关其大小的信息时委托给它:
private final char value[];
public int length() {
return value.length;
}