[英]What is difference between int.class and Integer.TYPE in java?
[英]Does int.class equal Integer.class or Integer.TYPE in Java?
让我们假设一个人使用反射检索一个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);
基于f.getDeclaringClass()
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 );
我错过了一个角落案例吗? 如果是,请发表评论。
int.class
编译为Integer.TYPE
。 但是,我认为您正在错误地使用Field.getDeclaringClass()
,因为它返回表示声明该字段的类的Class
对象。 你想要使用的是Field.getType()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.