JVM --- 语法糖

本文介绍了Java中的语法糖概念,重点讨论了泛型擦除如何提升代码的兼容性、运行效率和可读性。文章通过实例展示了默认构造器、自动装箱拆箱、可变参数、foreach循环和switch字符串在编译器中的处理方式。
摘要由CSDN通过智能技术生成

什么是语法糖

所谓的 语法糖 ,其实就是指 java 编译器把 .java 源码编译为 .class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利
注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外, 编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记。

1.默认构造器

在这里插入图片描述

2.自动装箱&自动拆箱

在这里插入图片描述

3.泛型擦除(重点)

在这里插入图片描述

  • 泛型擦除的作用和好处如下:
  1. 兼容性:泛型擦除使得使用泛型的代码可以与旧的非泛型代码兼容。在泛型引入之前的代码可以继续使用,并且可以与新的泛型代码进行互操作。
  2. 运行效率:由于泛型擦除减少了运行时的类型检查和类型转换,因此可以提高代码的运行效率。在擦除后,泛型对象被当作它们的原始类型来处理,避免了额外的类型检查和转换操作。
  3. 减少代码冗余:泛型擦除减少了重复代码的编写。在擦除后,不同的泛型类型会被擦除为相同的原始类型,从而减少了需要编写类似代码的情况。这样可以避免代码冗余和维护成本的增加。
  4. 可读性和简洁性:通过使用泛型,代码可以更加可读和简洁。泛型提供了类型安全,并使得代码更易于理解。擦除后,代码中的类型参数被替换为原始类型,从而使代码更加清晰和简洁。

尽管泛型擦除带来了一些限制和局限性(例如无法在运行时完全获得泛型类型信息),但它为我们提供了一种强大的工具来编写更安全、可复用和高效的代码。在大多数情况下,泛型擦除的好处远远超过了它的限制,并为Java带来了更好的语言特性。

4.可变参数

在这里插入图片描述

5.foreach循环
  • 数组的foreach循环
    在这里插入图片描述

  • 集合的foreach循环
    在这里插入图片描述

6.switch 字符串

在这里插入图片描述

在编译器中执行的操作 :

public class Candy6 {
   public Candy6() {
      
   }
   public static void main(String[] args) {
      String str = "hello";
      int x = -1;
      // 通过字符串的 hashCode + value 来判断是否匹配
      switch (str.hashCode()) {
         // hello 的 hashCode
         case 99162322 :
            // 再次比较,因为字符串的 hashCode 有可能相等
            if(str.equals("hello")) {
               x = 0;
            }
            break;
         // world 的 hashCode
         case 11331880 :
            if(str.equals("world")) {
               x = 1;
            }
            break;
         default:
            break;
      }

      // 用第二个 switch 在进行输出判断
      switch (x) {
         case 0:
            System.out.println("h");
            break;
         case 1:
            System.out.println("w");
            break;
         default:
            break;
      }
   }
}

过程说明:

  • 在编译期间,单个的 switch 被分为了两个
  • 第一个用来匹配字符串,并给 x 赋值
  • 字符串的匹配用到了字符串的 hashCode ,还用到了 equals 方法
  • 使用 hashCode 是为了提高比较效率,使用 equals 是防止有 hashCode 冲突(如 BM 和 C .)
  • 第二个用来根据x的值来决定输出语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值