gpt4 book ai didi

java - 为什么 Integer.class.isInstance(i) 返回 true,而 int.class.isInstance(i) 和 Integer.TYPE.isInstance(i) 返回 false?

转载 作者:行者123 更新时间:2023-12-02 13:56:03 24 4
gpt4 key购买 nike

Integer.class、int.class 和 Integer.TYPE 之间有什么区别?我对这三者有点困惑。

最佳答案

iint 还是 Integer:

  • Integer.class.isInstance(i) 返回 true
  • int.class.isInstance(i) 返回 false
  • Integer.TYPE.isInstance(i) 返回 false

让我们了解一下isInstance .

public boolean isInstance(Object obj)

Determines if the specified Object is assignment-compatible with the object represented by this Class.

它接受一个Object作为参数,而不是原始类型。传入的任何 int 都将被装箱为 Integer,以便可以将其传递给该方法。

Integer.class 是一个类文字,与引用类型一起使用,即对该类的 Class 对象的引用。

此方法看到的 Integer 对象肯定是 Integer 类的实例,因此 Integer.class.isInstance(i) 返回

但是,int.classInteger.TYPE每个都代表 int 基元类型,而不是 Integer 类,并且 Integer 不是 int,尽管事实上,由于装箱和拆箱,Java 通常可以互换使用它们。这解释了 int.class.isInstance(i)Integer.TYPE.isInstance(i) 的两个 false 输出。

类文字历史记录

根据Javadocs for Integer , Integer.TYPE 自版本 1.1 以来就已存在。

但是class literals have also been around since 1.1 .

Java APIs which require class objects as method arguments are much easier to use when the class literal syntax is available.

类文字使其非常易于使用 reflection, which was also new in Java 1.1 .

如果 int.class 表示与引用类文字一致的 int 基元类型,则尚不清楚为什么 Integer.TYPE 存在。它们是等价的,并且在比较它们时 == 产生 true

关于java - 为什么 Integer.class.isInstance(i) 返回 true,而 int.class.isInstance(i) 和 Integer.TYPE.isInstance(i) 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com