为什么println(数组)有奇怪的输出? ( “[Ljava.lang.String; @ 3e25a5”)

时间:2011-12-07 04:10:20

标签: java arrays string

我有一个字符串数组,其中包含我定义的四个元素。为什么当我输入System.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

6 个答案:

答案 0 :(得分:18)

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

  

toString的{​​{1}}方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和无符号的十六进制表示形式组成。对象的哈希码。换句话说,此方法返回一个等于值的字符串:

Object

要获得数组内容的getClass().getName() + '@' + Integer.toHexString(hashCode()) 表示,您可以使用Arrays.toString(Object[])

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

例如,在数组上调用此方法将导致以下", "

String

请注意,会产生双逗号和奇数间距,因为数组的元素"[Einstein, , Newton, , Copernicus, , Kepler.]" 已经有标点符号和空格。删除那些:

String

然后该方法将返回此String [] genius = {"Einstein", "Newton", "Copernicus", "Kepler"};

String

重要的是要注意使用此方法无法控制结果"[Einstein, Newton, Copernicus, Kepler]" 的格式。快速检查数组内容很好,但是限制超出了这个目的。例如,如果您不希望那些包含方括号,或者想要逐行列出每个元素,该怎么办?

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

您可以在this Java Tutorials article中找到有关String循环的更多信息。一般来说,Java Tutorials对于初学者来说是很好的阅读,并且应该很好地伴随你的课程。

答案 1 :(得分:8)

使用Arrays类为您展开数组:

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

会给你

  

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

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

答案 2 :(得分:3)

所以在你的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)。所以它会通过循环和打印天才[i](这将是天才[0])因为i = 0。然后它会添加一个i(i ++)。

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

它会转到i = 4并停止。你可能会想,天才怎么样[4]?那么数组数据就像这样命名为1st = arrayname [0],2nd = arrayname [1] .....所以第四个将是天才[3]。因此,当i = 4时,它会停止并打印出来。

您可以通过替换来更改其打印方式     system.out.print(genius [i] +“,”); 这将在每个之后加上逗号和空格。

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

答案 3 :(得分:2)

你需要一个循环:

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

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

答案 4 :(得分:2)

使用增强型for循环进行迭代,就像这样

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

答案 5 :(得分:1)

您需要遍历数组(例如,使用for循环)并分别打印每个值。

如果您尝试打印数组,它将打印有关您不会感兴趣的对象的信息。