为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 HashMap 实例的类类型与 HashMap.class 比较相等?

为什么 HashMap 实例的类类型与 HashMap.class 比较相等?

ITMISS 2021-09-15 15:39:14
HashMap<String, Set<String>> foo = new HashMap<>();if (foo.getClass().equals(HashMap.class)) {    System.out.print(true);}上面的代码打印为真。为什么这两种类型比较相等?我foo.getClass()包含超过类型信息HashMap.class。
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

Java 实现了带有类型擦除的泛型。在运行时没有关于泛型的信息。

Java 语言中引入了泛型以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java 编译器将类型擦除应用于:

  • 如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或对象。因此,生成的字节码仅包含普通的类、接口和方法。

  • 必要时插入类型转换以保持类型安全。

  • 生成桥接方法以保留扩展泛型类型中的多态性。

类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销。


查看完整回答
反对 回复 2021-09-15
?
慕慕森

TA贡献1856条经验 获得超17个赞

泛型在运行时并不重要。因此如下:

System.out.println(foo.getClass().equals(HashMap.class));

将返回true


查看完整回答
反对 回复 2021-09-15
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信