java 中 , 还有 int.class
这种写法 ?
int 不是基本类型吗 ??
int.class
是 Java 中对基本类型 int
的包装类。Java 的基本类型有 byte
, short
, int
, long
, float
, double
, char
和 boolean
,它们在编程中可以直接使用,例如 int a = 10;
。
然而,在一些情况下,我们需要将这些基本类型作为对象进行处理,这时就需要用到它们的包装类。这些包装类都是类,可以像其他类一样进行实例化、继承和实现接口等操作。它们的名称就是在基本类型后面加上 .class
。
例如,如果我们想在方法中需要一个 Class
对象,但是需要表示 int
类型,就可以使用 int.class
。以下是一个简单的例子:
public void printClassName(Class<?> clazz) {
System.out.println(clazz.getName());
}
public static void main(String[] args) {
printClassName(int.class); // 输出 "int"
}
这段代码中,int.class
作为参数传递给了 printClassName
方法,打印出来的结果是 "int",表示这是一个 int
类型的包装类。
同样地,你也可以用 Integer.class
来表示 Integer
类,这是一个对应于 int
的包装类,可以用于自动装箱和拆箱的操作。例如:
Integer boxedInt = 10; // 自动拆箱成 int 类型
int unboxedInt = boxedInt; // 自动装箱成 Integer 类型
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
每个基本类型都已其.class, 比如
boolean.class
,就一直到Java SE 8版本的Java而言:(未来也有可能会有变化)首先看
java.lang.Class
的JavaDoc:请特别留意最后一句。这一句所表述的意思是,作为特例,虽然Java的原始类型与void不是class或interface,但还是有对应的用于表现它们的Class对象。所以题主的问题:int有class,是否说明int其实在java中也算是一个类不是。int只是有对应的java.lang.Class对象作为反射系统的一部分,以便实现反射系统的完整性。但int是一个Java的基本类型,不是一个类。(当然我们事后评论可以认为java.lang.Class这个名字起得不好…)如果创建基本类型变量如int,也会用到对应的int.class吗?不会。int.class只有在反射操作时有用。例如说,对于这样的Foo.bar()方法:
它对应的
java.lang.reflect.Method
对象所报告的getReturnType()
的Class对象就会是int.class
所指向的那个。而如果我们要使用反射API在Foo.class
上精确查找这个bar()
方法的话, 用Foo.class.getDeclaredMethod("bar", int.class)
这里也需要用int.class
来指定参数类型(注意这个情况下不能用Integer.class来指定参数类型,因为那样匹配到的是 bar(Integer) 而不是 bar(int) )在JDK哪个JAR包下能找到int.class这个文件呢?并不存在。int.class对应的Class对象是JVM合成出来的,并不是从Class文件加载出来的。注意:int.class跟Integer.class所指向的不是同一个Class对象。JVM的实现中,在JVM初始化的时候就会把原始类型和void对应的Class对象创建出来。这些Class对象的创建不依赖任何外部信息(例如说需要从Class文件加载的信息),不需要经历类加载过程,而纯粹是JVM的实现细节。Java的int类型是原始类型,是值类型而不是引用类型(或者说“对象”)。使用它并不会触发任何类加载动作 ,不会调用任何构造器。它就是个简单的值,直接存储在局部变量/字段中。