简体   繁体   English

int.class在Java中是否等于Integer.class或Integer.TYPE?

[英]Does int.class equal Integer.class or Integer.TYPE in Java?

Let's imagine one retrieves the declaring type of a Field using reflection. 让我们假设一个人使用反射检索一个Field的声明类型。

Which of the following tests will correctly indicate whether one is dealing with an int or an Integer ? 以下哪个测试将正确指示是否正在处理intInteger

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

Based on Field.getType() (instead of f.getDeclaringClass() ), I get the following: 基于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

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: 这意味着如果我想知道我是在处理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 );

Is there a corner case I am missing? 我错过了一个角落案例吗? If yes, please comment. 如果是,请发表评论。

int.class compiles down to Integer.TYPE . int.class编译为Integer.TYPE However, I think you are using Field.getDeclaringClass() incorrectly, as this returns the Class object representing the class that declares the field. 但是,我认为您正在错误地使用Field.getDeclaringClass() ,因为它返回表示声明该字段的类的Class对象。 What you would want to use is Field.getType() . 你想要使用的是Field.getType()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM