为什么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()
,其文档解释了您所看到的内容:
类
Object
的toString
方法返回一个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
循环)并分别打印每个值。
如果你尝试打印一个数组,它将打印出你不会感兴趣的对象的信息。