为什么是 System.out.println(new String(copyTo))?
Why System.out.println(new String(copyTo))?
我正在学习这里的 Java 教程:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
然而出现了一个疑问:
为什么我需要 new String()
?直接使用System.out.println(copyTo)
会不会有什么潜在的问题?我认为在后台 println 已经具有转换为字符串的 toString 方法。
class ArrayCopyOfDemo {
public static void main(String[] args) {
char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd'};
char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
System.out.println(new String(copyTo));
}
}
是的,你是对的。 System.out.println()
首先通过String.valueOf()
将传递的对象转换为String,此方法调用对象的toString
方法。
所以你可以在没有 new String()
.
的情况下打印 copyTo
那里不需要new String(copyTo)
。 copyTo
就足够了。
通常,您不想在数组上调用 println
。例如:
System.out.println(new int[]{1, 2, 3});
不会打印 [1, 2, 3]
或 123
,而是打印 [I@243432
之类的东西。这是因为int[]
(或其他数组类型,char[]
除外)没有特殊重载,所以使用println(Object)
。这会在参数上调用 toString()
;但是数组没有有用的 toString()
实现。
然而,PrintStream.println(char[])
method 确实 在某种程度上 有效,并且产生的输出就像 char[]
首先转换为 String
(但请注意 toString()
方法 不是 用于生成此:没有 String
是从数组创建的)。
System.out.println(new String(copyTo));
System.out.println(copyTo);
caffein
caffein
我怀疑它只是文档中的一个 oversight/bug 使用了 new String
。我向 Oracle 提交了错误报告以修复它。
new String()
使用与传递的参数相同的字符序列初始化String的新对象,在这种情况下,参数是copyTo。
首先,将所需数量的字符复制到数组 copyTo 中。并将此数组传递给函数 String。 String 函数将从数组 copyTo 中创建一个单词。关键字 new
用于创建字符串的新实例(对象),因为字符串是 Java 中的 class。
您也可以使用 System.out.println(copyTo);
做同样的事情。这仅适用于 char 类型的数组。
我正在学习这里的 Java 教程: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
然而出现了一个疑问:
为什么我需要 new String()
?直接使用System.out.println(copyTo)
会不会有什么潜在的问题?我认为在后台 println 已经具有转换为字符串的 toString 方法。
class ArrayCopyOfDemo {
public static void main(String[] args) {
char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd'};
char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
System.out.println(new String(copyTo));
}
}
是的,你是对的。 System.out.println()
首先通过String.valueOf()
将传递的对象转换为String,此方法调用对象的toString
方法。
所以你可以在没有 new String()
.
copyTo
那里不需要new String(copyTo)
。 copyTo
就足够了。
通常,您不想在数组上调用 println
。例如:
System.out.println(new int[]{1, 2, 3});
不会打印 [1, 2, 3]
或 123
,而是打印 [I@243432
之类的东西。这是因为int[]
(或其他数组类型,char[]
除外)没有特殊重载,所以使用println(Object)
。这会在参数上调用 toString()
;但是数组没有有用的 toString()
实现。
然而,PrintStream.println(char[])
method 确实 在某种程度上 有效,并且产生的输出就像 char[]
首先转换为 String
(但请注意 toString()
方法 不是 用于生成此:没有 String
是从数组创建的)。
System.out.println(new String(copyTo));
System.out.println(copyTo);
caffein
caffein
我怀疑它只是文档中的一个 oversight/bug 使用了 new String
。我向 Oracle 提交了错误报告以修复它。
new String()
使用与传递的参数相同的字符序列初始化String的新对象,在这种情况下,参数是copyTo。
首先,将所需数量的字符复制到数组 copyTo 中。并将此数组传递给函数 String。 String 函数将从数组 copyTo 中创建一个单词。关键字 new
用于创建字符串的新实例(对象),因为字符串是 Java 中的 class。
您也可以使用 System.out.println(copyTo);
做同样的事情。这仅适用于 char 类型的数组。