Java语法糖概念

1. 语法糖Syntactic Sugar 糖衣语法,方便开发人员使用,JVM并不识别,会在编译阶段解语法糖,还原为基础语法。

2. com.sun.tools.javac.main.JavaCompiler中的deSugar方法,负责解语法糖的实现。

3. 常见的语法糖有泛型、变长参数、条件编译、自动拆装箱、内部类等。

具体实现

1. switch从1.7支持String和enum类型。

首先对编译器,switch关键字只能使用整型,如byte、char、short、int等。

字符串的switch是通过equals()和hashCode()方法来实现的。

2. 泛型

jvm中没有泛型,只有普通类型和普通方法,泛型类的类型参数,在编译时都会被擦除。泛型并没有自己独特的Class类型。

类型擦除:如果泛型参数指定了上限,如,移除所有类型参数,替换为顶级的父类型,如果没指定则使用Object。

3. 自动装箱、拆箱

装箱使用包装器的valueOf方法,拆箱使用包装器的xxxValue方法。

byte、short、char、int、long、float、double、boolean => Byte、Short、Character、Integer、Long、Fload、Double、Boolean等。

int i = 10;

Integer n = i;自动装箱,反编译class后,Integer.valueof(i)

int j = n;自动拆箱,反编译class后,使用n.intValue()方法

Integer -128 ~127之间有缓存。

4. 可变参数

String... strs,反编译后String[] strs,调用时创建String[]数组,传入方法。

5. 枚举类型

enum 创建具名值的有限集合。

创建一个enum类型,底层public class MyEnum extend Enum

6. 内部类

编译时的概念,编译后生成两个不同的.class文件。Outer.class和Outer$Inner.class

7. 数值字面量

整数、浮点数,都允许在数字之间插入任意多个下划线。编译阶段会去掉。

8. for-each

for-each底层使用普通的for循环和迭代器

9. lambda表达式

lambda的实现,依赖了底层lambda的api。编译阶段糖解,将lambda表达式转换为调用内部api的方式。LambdaMetafactory#metafactory

注意点

1. Iterato在工作的时候是不允许被迭代的对象被改变的。会抛出ConcurrentModificationException异常,可以使用Iterator本身的remove方法。

2. ListItr与Ltr操作expectedModCount避免异常。

使用int cursor;下标索引

int nextIndex;和Node next;下标

java语法糖效率高吗_打包 Java将持续向“高糖”方向发展,你真的了解Java语法糖吗? _好机友...相关推荐

  1. 计算机专业毕业设计—JAVA语言系统设计(共80套打包)

    JAVA SMART系统-系统框架设计与开发(源代码+论文).rar java Smart系统-题库及试卷管理模块的设计与开发(源代码+论文) java Smart系统-题库及试卷管理模块的设计与开发 ...

  2. 台达伺服电机选型手册_机械加工工艺师手册_打包下载

    如何[设为星标★],优先推送资料信息? Ta们都在看咱们:机械大佬群                                注意及时保存和下载,资料若失效请拉到本页底部留言,我们将不定时补发! ...

  3. java开发中遇到的问题及解决方法(持续更新)

    java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...

  4. python真的超过java了吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  5. python比java难吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  6. 知乎高赞!python能做这么多自动化,可开发效率真的有Java高?

    python可以用来干嘛? 可以用来处理海量的Excel表格数据并进行数据分析 可以用来收集想要的信息并进行数据分析 数据挖掘并为项目提供数据支持 我已经,把数据库移到了一台淘汰下来的办公电脑上,又用 ...

  7. php 开发 比 java 快_PHP 比 Java 的开发效率高在哪?

    做了几年PHP,最近在转Java,已经用Java做了半个互联网项目的人强答一下. 个人认为,PHP开发效率高主要是因为弱类型特性和自带强力函数库的原因. Java有太多的条条框框,对于我这种刚学的人来 ...

  8. python开发效率怎样_Python 的开发效率真的比 Java高吗?

    真的比Java高很高. 几个例子. 爬虫领域,几年前就用Scrapy抓百度,新浪,股吧等各种东西. 五分钟写好一个小爬虫,爽到暴有没有?当年我就是靠教人写爬虫...才骗到小妹妹跟我约会的. 文本处理, ...

  9. python和土木工程_Python 的开发效率真的比 Java高吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:暗灭 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 真的比Java高很高. 几个例子. 爬虫领域,几年前就用Sc ...

  10. ros开发语言python效率_Python 的开发效率真的比 Java高吗?

    看看大佬的思考吧 Quora是国外知名的问答社区,性质与知乎类似.它的创始人Adam D'Angelo曾是Facebook的员工,众所周知,Facebook大量地使用了PHP,而Adam在开发Quor ...

最新文章

  1. 【 MATLAB 】 WLLS algorithm Simulation of TOA - Based Positioning
  2. Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
  3. 假笨说-协助美团kafka团队定位到的一个JVM Crash问题
  4. ESP8266的一个小问题
  5. JAVA入门[22]—thymeleaf
  6. QuorumPeerMain数量可否和HRegionServer节点数量不一致?
  7. python关系图谱_文本分析之制作网络关系图
  8. javascript练习----复选框全选,全不选,反选
  9. 苹果芯片团队又遭挖人,重量级芯片设计师被微软挖走
  10. SAP License:SAP电话面试
  11. STVD ERROR:misplaced local declaration
  12. 【Prufer Sequence +简单排列组合】bzoj 1005: [HNOI2008]明明的烦恼
  13. Windows 10 Java安装教程
  14. 空间机器人建模与仿真报告
  15. 通信电子线路高如云pdf_通信电子线路 第三版 教学课件 高如云 封面及目录.pdf...
  16. Opencvchina网站:把证件照蓝色背景转为白色
  17. 灵活就业人员压力好大,不知道该不该继续交社保?
  18. win10用户和计算机,对于电脑工作者们,更喜欢用win7还是win10呢?
  19. MaxEnt运行报错的各种问题及解决方法
  20. 安卓手机小说阅读器_百万小说阅读器app免费版下载-百万小说阅读器app手机版下载v1.4...

热门文章

  1. 大数据学习笔记35:Hive - 内部表与外部表
  2. 2017.10.27 sue的小球 失败总结
  3. win7为什么打开桌面上的计算机很卡很慢,Win7系统运行不流畅卡半天才进入桌面的六种解决方法...
  4. 【英语学习】【医学】无机化学 - 化合物命名(1) - 离子化合物
  5. Pentium II Pentium III架构/微架构/流水线 (4) - P6详解 - 高速缓存/Store Buffers
  6. 《深入理解计算机系统》CSAPP
  7. Windows下openssl的下载安装和使用
  8. 在未来人类在计算机行业中扮演什么角色,刘慈欣:未来人类可能生活在计算机里...
  9. object-c 混编 调用C,C++接口
  10. UE3 虚幻编辑器控制台命令