假设我们使用反射来检索 Field
的声明类型。
以下哪些测试可以正确地指出一个是在处理 int
还是 Integer
?
Field f = ...
Class<?> c = f.getDeclaringClass();
boolean isInteger;
isInteger = c.equals(Integer.class);
isInteger = c.equals(Integer.TYPE);
isInteger = c.equals(int.class);
isInteger = ( c == Integer.class);
isInteger = ( c == Integer.TYPE);
isInteger = ( c == int.class);
最佳答案
基于 Field.getType()
(而不是 f.getDeclaringClass()
),我得到以下信息:
Type: java.lang.Integer
equals(Integer.class): true
equals(int.class) : false
equals(Integer.TYPE) : false
== (Integer.class) : true
== (int.class) : false
== (Integer.TYPE) : false
Type: int
equals(Integer.class): false
equals(int.class) : true
equals(Integer.TYPE) : true
== (Integer.class) : false
== (int.class) : true
== (Integer.TYPE) : true
Type: java.lang.Object
equals(Integer.class): false
equals(int.class) : false
equals(Integer.TYPE) : false
== (Integer.class) : false
== (int.class) : false
== (Integer.TYPE) : false
意思如下:
Integer.TYPE.equals(int.class)
Integer.TYPE == int.class
意思是如果我想知道我是在处理 int
还是 Integer
,我可以使用以下任何测试:
isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE);
isInteger = c.equals(Integer.class) || c.equals(int.class);
isInteger = (c == Integer.class) || (c == Integer.TYPE);
isInteger = (c == Integer.class) || (c == int.class );
是否有我遗漏的角落案例?如果是,请发表评论。
关于java - int.class 是否等于 Java 中的 Integer.class 或 Integer.TYPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082997/