当我们将参数传递给System.out.println()时会发生什么?

时间:2014-07-12 21:55:24

标签: java

我是初学者,我无法理解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);

    }

}

4 个答案:

答案 0 :(得分:3)

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

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

查看this

答案 1 :(得分:2)

  

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

因为它是在Java specification Chapter 5 § 1.11

中定义的
  

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

     

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

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

  •   
  • 如果T为char,则使用新字符(x)。

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

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

  •   
  • 如果T为float,则使用new Float(x)。

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

  •   
     

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

     

现在只需要考虑参考值:

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

  •   
  • 否则,转换的执行就好像通过调用没有参数的引用对象的toString方法一样;但是如果调用toString方法的结果为null,那么字符串" null"用来代替。

  •   

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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