Java的.getClass()返回一个类,为什么我也能得到一个字符串呢?

Lut*_*her 12 java

当我使用System.out.println(obj.getClass())它时不会给我任何错误.据我所知,getClass()返回一个Class类型.既然println()只打印字符串,那么如何println获取字符串?

rol*_*lfl 36

System.out.println(someobj) 总是相当于:

System.out.println(String.valueOf(someobj));
Run Code Online (Sandbox Code Playgroud)

并且,对于someobj的非null值,打印someobj.toString();

在你的情况下,你是这样做的println(obj.getClass()),你真的在​​做:

System.out.println(String.valueOf(obj.getClass()));
Run Code Online (Sandbox Code Playgroud)

这是toString在类上调用方法.

  • @jazzbassrob:`String.valueOf(Object obj)`的标准定义是`return(obj == null)?"null":obj.toString();`,所以它基本上是一样的,加上'null`处理. (6认同)
  • +1,最准确.来自PrintStream.println(Object)的API文档:"此方法首先调用String.valueOf(x)以获取打印对象的字符串值..." (2认同)

nul*_*ptr 19

Java中的所有对象都继承自Object类.如果查看该文档,您将看到Object指定toString将对象转换为String的方法.由于所有非基本类型(包括Classes)都是Objects,因此可以使用其toString方法将任何内容转换为字符串.

类可以覆盖此方法,以提供自己的方式转换为字符串.例如,String类重写Object.toString以返回自身.Class覆盖它以返回类的名称.这使您可以指定希望输出对象的方式.