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.class
和 int.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分别是啥的主要内容,如果未能解决你的问题,请参考以下文章
为啥 getConstructor 反射 API 需要 int.class 参数?