文档详情

【Java基础】Java中的语法糖.docx

发布:2021-11-02约8.59千字共16页下载文档
文本预览下载声明
PAGE PAGE 1 【Java基础】Java中的语法糖 【Java基础】Java中的语法糖 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了便利程序员的开发,提高开发效率。说白了,语法糖就是对现有语法的一个封装。 但其实,Java虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成容易的基础语法结构,这个过程就是解语法糖。所以真正支持语法糖的是Java编译器。 Java中的语法糖 switch支持String和枚举 泛型 自动装箱与拆箱 办法变长参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with-resource Lambda表达式 字符串+号。 switch对String和枚举类的支持 switch对枚举和String的支持原理其实差不多。switch原生支持只能支持比较整数类型。假如switch后面是String类型的话,编译器会将其转换成String的hashCode的值,所以其实比较的是String的hashCode值。假如switch后面是Enum的话,编译器会将其转换为这个枚举定义的下标(ordinal)。其实最后都是比较的整数类型。下面以Stirng举个列子。 源代码 public class switchDemoString { public static void main(String[] args) { String str = quot;worldquot;; switch (str) { case quot;helloquot;: System.out.println(quot;helloquot;); break; case quot;worldquot;: System.out.println(quot;worldquot;); break; default: break; } } } 反编译后的代码 public class switchDemoString { public switchDemoString() { } public static void main(String args[]) { String str = quot;worldquot;; String s; switch((s = str).hashCode()) { default: break; case if(s.equals(quot;helloquot;)) System.out.println(quot;helloquot;); break; case 113318802: if(s.equals(quot;worldquot;)) System.out.println(quot;worldquot;); break; } } } 通过反编译可以发觉,举行switch的实际是哈希值,然后通过用法equals办法比较举行平安检查,这个检查是须要的,由于哈希可能会发生碰撞。因此它的性能是不如用法枚举举行switch或者用法纯整数常量。 对泛型的支持 在JDK1.5中,Java语言引入了泛型机制。但是这种泛型机制是通过类型擦除来实现的,即Java中的泛型只在程序源代码中有效(源代码阶段提供类型检查),在编译后的字节码中自动用强制类型转换举行替代。也就是说,Java语言中的泛型机制其实就是一颗语法糖,相较与C++、C相比,其泛型实现实在是不那么优雅。 /** * 在源代码中存在泛型 */ public static void main(String[]
显示全部
相似文档