【问题标题】:Java System.out.println() an array [duplicate]Java System.out.println() 一个数组
【发布时间】:2025-04-26 23:40:01
【问题描述】:

我一直想知道当你在 java 中打印一个数组时你得到的值是什么意思。

float[] array = new float[] {1f,1f,1f,1f};
System.out.println(array);

我收到的输出是 [F@7fbe847c
我假设 F 表示浮动(如果我错了,请纠正我)

我注意到当我使用字符串数组时,有些东西会发生变化

String[] array = new String[] {"a","a","a","a"}
System.out.println(array);

现在的输出是 [Ljava.lang.String;@7fbe847c
我假设 Ljava.lang.String;表示它是一个字符串数组(如果我错了,请纠正我)。
无论哪种方式,@7fbe847c 都保持不变。

我的问题不是如何打印数组(我已经知道要使用 Arrays.toString()),我的问题是 这个值是什么意思以及它通常使用什么为了?

【问题讨论】:

    标签: java arrays system.out


    【解决方案1】:

    每个对象都有一个toString()方法,默认的方法是显示对象的类名表示,然后“@”后跟它的hashcode。hashCode的一般约定是,每当在同一个对象上调用更多在 Java 应用程序执行期间不止一次,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上等于比较中使用的信息所以你看到的是浮点和字符串数组的默认 toString() 表示.

    【讨论】:

    • 谢谢,这似乎就是我要找的东西
    【解决方案2】:

    如上所述,仅打印将调用对象的 toString 方法。由于此方法尚未被覆盖,因此 Object 的 toString 方法被调用。确切的输出在 javadocs 中指定 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

    上面写着

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

    即就是类名+“@”+对象hashCode()方法的HexString

    【讨论】: