【问题标题】:What happens when we pass an argument to System.out.println()?当我们将参数传递给 System.out.println() 时会发生什么?
【发布时间】:2014-07-12 21:55:24
【问题描述】:

我是初学者,我无法理解 println() 函数的实际工作原理。当我将原始变量传递给它时。它打印它的价值。当我传递一个对象时,为什么它会打印默认的 toString() 方法定义?即

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

所以当我试图打印出一个数组时。

 System.out.println(Arrays.toString(array))

我是覆盖 Object 类的 toString 的默认方法定义,还是只是使用 Arrays 类的 toString() 方法将 Array 转换为 String。

import java.util.Arrays;


public class RevString 
{
    public static void main(String[] args)
    {
        String str = "abcde";
        int x=2;
        String[] e =str.split("---");
        System.out.println(e);
        System.out.println(Arrays.toString(e)+ " " +"Primitive is " + " " + x);

    }

}

【问题讨论】:

  • 它确实使用了toString() 方法。除非它在继承链中的某处被覆盖,否则将使用来自Object 的那个。

标签: java


【解决方案1】:

toString() 方法如果没有被覆盖,将继承自对象类。 所以你需要在你的类中重写它,以便能够显示你的对象的成员。

当前的 IDE 自动提供此选项,因此您只需右键单击并使用类成员生成 toString 方法

看看this

【讨论】:

    【解决方案2】:

    当我传递一个对象时,为什么它会打印默认的 toString() 方法定义?

    因为它是在Java specification Chapter 5 § 1.11中定义的:

    任何类型都可以通过字符串转换转换为String类型。

    原始类型 T 的值 x 首先被转换为引用值,就好像通过将其作为参数提供给适当的类实例创建表达式 (§15.9):

    • 如果 T 是布尔值,则使用 new Boolean(x)。

    • 如果 T 是 char,则使用 new Character(x)。

    • 如果 T 是 byte、short 或 int,则使用 new Integer(x)。

    • 如果 T 很长,则使用 new Long(x)。

    • 如果 T 是浮点数,则使用 new Float(x)。

    • 如果 T 是 double,则使用 new Double(x)。

    然后通过字符串转换将这个引用值转换为String类型。

    现在只需要考虑参考值:

    • 如果引用为空,则将其转换为字符串“null”(四个 ASCII 字符 n、u、l、l)。

    • 否则,转换就像调用被引用对象的 toString 方法一样执行,不带参数;但是如果调用toString方法的结果为null,则使用字符串“null”代替。

    【讨论】:

      【解决方案3】:

      .toString 获取变量的值并将其更改为字符串。我不相信它实际上改变了库的定义。这可能会有所帮助:Override valueof() and toString() in Java enum

      【讨论】:

      • 我更喜欢 GingerHead 的回答,但如果我的回答有帮助,请告诉我。
      【解决方案4】:

      实际上每个原始类型都有一个 println() 方法,而对象则有一个。基元打印为 String.valueOf('primitive') 而对象打印为 'object'.toString()

      【讨论】:

        猜你喜欢
        • 2012-01-03
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-26
        • 2019-10-10
        • 2013-07-29
        相关资源
        最近更新 更多