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

rah*_*e24 11 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);
    }
}   
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

[Ljava.lang.String;@3e25a5
Run Code Online (Sandbox Code Playgroud)

Pau*_*ora 19

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

toString类的方法Object返回一个字符串,该字符串由对象为实例的类的名称,符号字符"@"和对象的哈希码的无符号十六进制表示组成.换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)

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

String此方法返回由每个元素的的toString()表示,在顺序出现在阵列中并包含在方括号("[]").相邻元素由逗号和空格(", ")分隔.

例如,在数组上调用此方法将导致以下结果String:

"[Einstein, , Newton, , Copernicus, , Kepler.]"
Run Code Online (Sandbox Code Playgroud)

请注意,会产生双逗号和奇数间距,因为数组的元素String已经包含标点符号和空格.删除那些:

String [] genius = {"Einstein", "Newton", "Copernicus", "Kepler"};
Run Code Online (Sandbox Code Playgroud)

然后该方法将返回String:

"[Einstein, Newton, Copernicus, Kepler]"
Run Code Online (Sandbox Code Playgroud)

重要的是要注意使用此方法不会让您对结果的格式进行任何控制String.它很适合快速检查数组的内容,但仅限于此目的.例如,如果您不希望那些包含方括号,或者想要逐行列出每个元素,该怎么办?

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

您可以for本Java教程文章中找到有关循环的更多信息.一般来说,Java教程对于初学者来说是很好的阅读,应该很好地配合你的课程.


Pau*_*aul 9

使用Arrays类为您扩展数组:

System.out.println(Arrays.toString(genius));
Run Code Online (Sandbox Code Playgroud)

会给你

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

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


tal*_*las 1

您需要迭代数组(for例如使用循环)并单独打印每个值。

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