Does int.class equal Integer.class or Integer.TYPE in Java?

只谈情不闲聊 提交于 2019-11-27 04:24:24

问题


Let's imagine one retrieves the declaring type of a Field using reflection.

Which of the following tests will correctly indicate whether one is dealing with an int or an 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);

回答1:


Based on Field.getType() (instead of f.getDeclaringClass()), I get the following:

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

Meaning the following is true:

Integer.TYPE.equals(int.class)
Integer.TYPE == int.class

Meaning if I want to find out whether I am dealing with an int or an Integer, I can use any of the following tests:

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 );

Is there a corner case I am missing? If yes, please comment.




回答2:


int.class compiles down to Integer.TYPE. However, I think you are using Field.getDeclaringClass() incorrectly, as this returns the Class object representing the class that declares the field. What you would want to use is Field.getType().



来源:https://stackoverflow.com/questions/7082997/does-int-class-equal-integer-class-or-integer-type-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!