Java 将数组转换为此行中的字符串有什么用;System.out.println(新字符串(array1))&引用;

Java 将数组转换为此行中的字符串有什么用;System.out.println(新字符串(array1))&引用;,java,Java,这个程序取自我用来教学生的课本。在代码的最后一行,我不明白作者想说什么新字符串(array2)。我在没有新字符串的情况下获得相同的输出,即直接打印array2 public class ArrayCopyDemo { public static void main(String [] args) { char [] array1 = {'d','e','f','g','h','i','j','k','d','e','f','g','h','i'

这个程序取自我用来教学生的课本。在代码的最后一行,我不明白作者想说什么新字符串(array2)。我在没有新字符串的情况下获得相同的输出,即直接打印array2

public class ArrayCopyDemo
{
    public static void main(String [] args)
    {
        char [] array1 = 

        {'d','e','f','g','h','i','j','k','d','e','f','g','h','i','j','k'};
        char [] array2 = new char[15];

        System.arraycopy(array1, 3, array2, 0, 7);
        System.out.println(new String(array2));  
    }
}

如果您要将其与字符串连接起来,这会很有帮助。例:-

char [] array1 = 

        {'d','e','f','g','h','i'};
        char [] array2 = new char[15];

        System.arraycopy(array1, 3, array2, 0, 7);
        System.out.println(new String(array1));
如果要打印内容
array1
内容。说“你好,德夫吉”

错误代码

正确代码


这是一个例子来说明它的用途。尽管
new String()
的使用在代码中没有任何意义。

显然,写这篇文章的人知道数组不会覆盖到字符串。我们都被这一点烧掉了,只需要打印出一个东西并得到一个哈希代码就可以说明问题

但也许作者不知道println对char[]有一个覆盖;我知道我直到几分钟前才意识到这一点。您可以在不需要的情况下进行大量Java编程。如果您实际上不知道这一点,那么像发布的代码那样显式地进行转换是有意义的

(或者,也可能是作者确实知道,但不想假设他的学生知道。当您编写供初学者阅读的代码时,您希望避免将读者与任何不寻常的东西混淆,哪怕只是为了避免反复回答相同的新手问题。)

如果问题是如何向学生解释这一点,你可能想谈谈软件中的一切是如何一直在变化的,我们的目标是使工作软件在时间压力下足够好,即使我们的知识不完善

这里还有机会讨论设计决策的影响,比较Java中字符串和字符数组、原语和对象之间的区别,不像Haskell中那样。因此,我们有这些设计选择,它们会导致API中出现奇怪的角落和丑陋的地方,Java实现者不能仅仅因为担心向后兼容性而摆脱这些缺点。Java充满了不直观的边缘情况,请参阅


通常,教师(特别是研究生)会在接到通知后很快就不得不教授一门他们以前从未使用过的语言。教科书编写者正在努力完成他们的书,有时可能会遗漏一些东西。有时这种语言有一些奇怪的边缘情况,期望每个人都知道是不公平的。学生必须根据这些实际情况调整他们的期望。

通常,使用
新字符串(array2)
字符[]
数组转换为
字符串
,其字符与数组本身相同

请注意,定义的
println
方法有两个重载变量,请参见
java.io.PrintStream.println(char[]x)
java.io.PrintStream.println(String x)
,但是,它们会导致相同的行为,因此您可以忽略创建
新字符串


但是,您应该意识到这一点。

这根本没有用。
println(char[])
过载正是为了这个目的而存在的。谢谢你-安迪·特纳,但是如果我要向学生解释为什么会出现在教科书中,我能给他们什么可能的解释呢?可能写这篇文章的人没有意识到println过载,但我们知道数组没有toString覆盖。“即使是编写教科书的人,也不是每一个细节都是专家,也不一定是专家。”WellieNelson我想请他们向你解释一下是否有任何区别。这将是学习查找和理解文档的一个练习。我能想到的唯一优势是将其转换为字符串,这样可以让您执行其他类似字符串的操作,例如:
System.out.println(“新数组:+New string(array1))
System.out.println(“某物”+array1))不会像您在回答中所述那样引发异常。它正在打印附加到字符串的对象的散列。是的,没错。非常感谢你的解释/建议
System.out.println("Something"+array1)); //"Something 'array type' as string and char array is being concatenated.
 System.out.println("Something"+new String(array1));