为什么println(数组)有奇怪的输出? (“

我有一个string数组,其中包含了我定义的四个元素。 当我inputSystem.out.println(name of Array) ,怎么会输出这些元素呢? 但是反而给了我一个奇怪的输出。

这是我的代码…

 public class GeniusTrial { public static void main(String[]args) { String [] genius = {"Einstein, ", "Newton, ", "Copernicus, ", "Kepler."}; System.out.print(genius); } } 

这是我得到的输出:

 [Ljava.lang.String;@3e25a5 

数组的toString()方法返回一个描述数组身份而不是其内容的String 。 这是因为数组不会覆盖Object.toString() ,其文档解释了您所看到的内容:

ObjecttoString方法返回一个string,该对象是实例的类名,符号字符“@”和对象的哈希码的无符号hex表示forms。 换句话说,这个方法返回一个string,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

要获得数组内容的String表示,可以使用Arrays.toString(Object[])

该方法返回的String由每个元素的toString()表示forms组成,按照它们出现在数组中的顺序并用方括号括起来( "[]" )。 相邻元素之间用逗号和空格分隔( ", " )。

例如,在你的数组上调用这个方法会导致下面的String

 "[Einstein, , Newton, , Copernicus, , Kepler.]" 

请注意,双逗号和奇数间距是因为你的数组的元素String已经有标点符号和空格在其中。 删除那些:

 String [] genius = {"Einstein", "Newton", "Copernicus", "Kepler"}; 

该方法将返回这个String

 "[Einstein, Newton, Copernicus, Kepler]" 

重要的是要注意,使用这个方法并不能控制结果String的格式。 快速检查数组的内容是很好的,但超出这个目的是有限的。 例如,如果你不想要那些括起来的方括号,或者想要逐行列出每个元素呢?

在这一点上,你应该开始看到实现你自己的方法的价值,以特定于你的任务的方式输出你的数组的内容。 正如其他人所build议的,通过使用for循环并构build要输出的新结果String来实现此目的。

在这篇Java教程文章中,您可以find关于for循环的更多信息。 一般来说, Java教程对于初学者来说是非常棒的阅读,应该很好地陪伴你的课程。

使用Arrays类为您展开数组:

 System.out.println(Arrays.toString(genius)); 

会给你

[爱因斯坦,,牛顿,,哥白尼,,开普勒。]

双逗号是因为你把它们包括在你的数组中; 删除它们,你会得到一个很好的逗号分隔列表。

所以在你的for循环将会是这样的:

 for(i=0;i<genius.length;i++) { system.out.print(genius[i]); } 

所以我会解释一下。 for循环的结构如下所示:

 for(original value; condition for the variable to go through the for loop; what to do to variable at end of for loop) 

所以你从i = 0开始,并且满足条件:i小于genius.length(genius.length给出数组的长度,在这种情况下是4)。 所以它会通过循环和打印天才[我](这将是天才[0]),因为我= 0。 然后它会添加一个我(我++)。

它会再次通过循环,因为我= 1填充条件我小于genius.length …..等等…

它会去i = 4并停止。 你可能会想,天才呢[4]? 那么arrays数据就像这样命名1st = arrayname [0],2nd = arrayname [1] …..所以第四个将是天才[3]。 所以当我= 4停止,所有打印。

你可以通过replacesystem.out.print(genius [i] +“,”)来改变打印格式。 这将在每个之后留下一个逗号和空格。

希望它有帮助,祝你好运。

像这样使用增强的for循环来迭代

 for(String str:genius){ System.out.println(str) } 

你需要一个循环:

 for(String gen : genius) { System.out.print(gen); } 

每个对象都有一个toString()方法,就是你所看到的string数组的toString。

你需要迭代你的数组(例如for循环)并分别打印每个值。

如果你尝试打印一个数组,它将打印出你不会感兴趣的对象的信息。