有没有一种方法可以将Java数据类型输出到控制台?

53

我正在尝试调试一个我继承的程序。这个程序包含了字符串、数组列表和集合,大量类型之间的强制转换,并且我需要进行一些字符串操作(如substring等)。

当打印到控制台时,数据看起来像是字符串(例如一行文本,比如Johnson, John或者Chicago Region),但是我的代码会出现各种index out of range错误,这表明我的转换成字符串的代码没有起作用。

我想尝试找出进入和离开我的方法的数据类型,以验证程序是否按照预期运行。在Java中有没有找到字段类型的方法?在完美的世界中,我可以在每个步骤都生成控制台输出,给出数据值以及它是一个字符串、数组列表还是集合。这可行吗?


1
顺便说一下,如果你没有收到“ClassCastException”的错误,那么对于String的转换是有效的。 - Keith Randall
5个回答

84

给定任何对象的实例,您可以调用它的getClass()方法,以获取描述该对象类型的Class对象的实例。

使用Class对象,您可以轻松打印其类型名称:

Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getName());

这将在控制台打印出类的完全限定名称,例如:

java.lang.Integer

如果您希望输出更加简洁,请使用以下方式:
Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getSimpleName());

getSimpleName() 方法只返回类名:

Integer

打印基本变量类型有些复杂:详情请参见此SO问题

8

对于任何对象x,您可以打印x.getClass()


1
我会执行 x.getClass.getName()。 - Colin D
@PaulVargas if(object == null){ sout("null")}如果(object == null){ sout(“null”)} - Mob
那么数组呢?对象或基本类型的数组? - Paul Vargas
一个 int 数组将打印 [I,例如。 - Keith Randall

2

instance.getClass() 是打印类型的方法。如果你想要根据类型分支行为,也可以使用 instanceof

if ( x instanceof String )
{
   // handle string
}

2
使用getClass()方法。
Object o;
System.out.println(o.getClass());

0

在任何对象中只需执行.class.getName();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接