当我使用System.out.println(obj.getClass())
时,它没有给我任何错误。据我所知,getClass()
返回一个Class类型。由于println()
只会打印字符串,那么为什么println
获得的不是类,而是一个字符串呢?
当我使用System.out.println(obj.getClass())
时,它没有给我任何错误。据我所知,getClass()
返回一个Class类型。由于println()
只会打印字符串,那么为什么println
获得的不是类,而是一个字符串呢?
System.out.println(someobj)
总是等同于:
System.out.println(String.valueOf(someobj));
对于非null
值的someobj
,它会打印出someobj.toString();
在您的情况下,您正在执行println(obj.getClass())
,因此您实际上正在执行:
System.out.println(String.valueOf(obj.getClass()));
调用类上的toString
方法。
String.valueOf()
而不是object.toString()
?我注意到Java API的其他部分也使用了String.valueOf
,而我通常会使用后者。 - devrobfString.valueOf(Object obj)
的标准定义为 return (obj == null) ? "null" : obj.toString();
,因此它基本上是相同的,只需添加了对 null
的处理。 - KeppilObject
指定了一个toString
方法,用于将对象转换为字符串。由于所有非基本类型(包括Class
)都是Object
,因此可以使用其toString
方法将任何内容转换为字符串。String
类覆盖Object.toString
以返回它自己。Class
则覆盖它以返回类的名称。这使您可以指定输出对象的方式。请参见代码:
787 public void println(Object x) {
788 String s = String.valueOf(x);
789 synchronized (this) {
790 print(s);
791 newLine();
792 }
793 }
String.valueOf(x)
。632 public void print(String s) {
633 if (s == null) {
634 s = "null";
635 }
636 write(s);
637 }
null
:)Set s = new Set();
s.add(1);
s.add(3);
s.add(5);
System.out.println(s);
将输出 "[1, 3, 5]"。
Integer
可以隐式转换。 - nullptr
obj.getClass().getName()
?还是obj.getClass().toString()
? - Maxim Shoustin