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