Integer和int.class分别是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Integer和int.class分别是啥相关的知识,希望对你有一定的参考价值。

参考技术A 楼主,你的意思是说Integer和int.class的区别是吧。
首先要搞清楚,int.class是什么。int.class是Class对象的引用,严格来说是原始类型int的Class对象引用。举一个简单的例子,假设你自己建立了一个Dog类,那么Dog.class就是Dog类型的Class对象引用。每一个类加载之后,类加载器会给建立Class对象,你可以用Class.forName()方法取得该对象的引用,比如,Class
d
=
Class.forName("Dog");其中d就是Dog的Class对象的引用。同时,你也可以用Class
d
=
Dog.class;来获取Dog的Class对象的引用。其实Dog.class本身就是引用。说得有点儿啰嗦。
int.class是int类型的Class对象引用。int类型是原始类型,JVM运行时,int类型Class对象已经建立,那么如何获取该对象的引用呢?就是用int.class。另外一种方法是用Integer.TYPE静态成员变量来获取。
现在可以说区别了
int.class是一个引用,注意是一个引用,而不是类
Integer是int类型的包装类,注意是一个类。而不是引用
参考技术B 将integer数值对象的数值赋给realnumber整型变量。
从jdk1.5开始,jvm引入装箱,拆箱机制,上面的那句可以简写为:int
n=(integer)session.getattribute("count");
,但jdk1.5以下的版本没有该机制,而int是数据类型,integer是一个对象。不能直接赋值,只能调用integer的方法intvalue返回一个整型数值.

如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?

【中文标题】如何将 Integer.class (和其他盒装)转换为 int.class (和其他原语)?【英文标题】:How to convert Integer.class (and other boxed) to int.class (and other primitives)? 【发布时间】:2020-10-29 13:32:33 【问题描述】:

有没有办法将Integer.class 转换为int.class 等其他原始类型?

类似:

jshell> Boolean.class.isPrimitive()
$1 ==> false
jshell> Boolean.class.asPrimitive() == boolean.class
$2 ==> true

【问题讨论】:

第一件事 int 不是一个类,它是一个原语,java 将使用称为自动装箱和拆箱的概念自动转换它 我在问int.class 这是一个Class 这会让你明白什么是 Integer.classint.class ***.com/questions/22470985/integer-class-vs-int-class 没有。您必须将自己的包装类 Map 制作为原始类型。 当您说“将 Integer.class 转换为 int.class”时,恐怕您需要更清楚您的意思。你具体想做什么?注意,当你使用反射时,即使一个字段或方法参数是“int.class”类型的,你为该字段获取的值或通过反射传递给参数的值仍然是一个包装器(即Integer.class)跨度> 【参考方案1】:

使用来自commons-lang 的ClassUtils 可以做到这一点:

jshell> import org.apache.commons.lang3.ClassUtils

jshell> ClassUtils.primitiveToWrapper(int.class)
$1 ==> class java.lang.Integer

jshell> ClassUtils.wrapperToPrimitive(Float.class)
$2 ==> float

【讨论】:

【参考方案2】:

它没有Java SE方法,但是很容易保持一个Map:

private static final Map<Class<?>, Class<?>> wrapperToPrimitive = Map.of(
    Void.class, void.class,
    Boolean.class, boolean.class,
    Byte.class, byte.class,
    Character.class, char.class,
    Short.class, short.class,
    Integer.class, int.class,
    Long.class, long.class,
    Float.class, float.class,
    Double.class, double.class);

【讨论】:

以上是关于Integer和int.class分别是啥的主要内容,如果未能解决你的问题,请参考以下文章

Java-反射之获取方法信息

为啥 getConstructor 反射 API 需要 int.class 参数?

int和integer的区别是啥?

java中的语句integer.parseint()是啥意思

Integer 是啥类型?

JAVA里Integer是啥意思