jvm 语法糖】的更多相关文章

jvm 语法糖主要包括:   1. 泛型 相同擦除类型参数,返回值不同也可以编译成功, 对比方法重载矛盾.     原因:class文件格式中,只要描述符不是完全一致的两个方法就可以共存.     擦除:擦除方法code属性中字节码擦除,元数据还保留在泛型中,可以通过反射获取参数化类型.   3. 装箱拆箱:Integer.valueOf(),Integer.intValue()   4. for循环,把遍历循环代码还原成了迭代器实现,因此需要被遍历的类实现Iterable接口.   5. 变长…
java有很多语法糖,比如自动拆箱,自动装箱,foreach等等,这些原理相信每一个入门教程里都有讲,但是我相信不是每一个人 都通过查看这些语法糖的字节码来确认这些原理,因为我也是现在才想看一下. 1.自动拆箱和自动装箱 public void test() { Integer integer = 1; int i = integer; } //将常量1放入操作数栈 0: iconst_1 //调用Integer.valueOf 入参为0操作指令压入的1 1: invokestatic #2 /…
JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.…
自动装箱与自动拆箱 首先要提到的便是 Java 的自动装箱(auto-boxing)和自动拆箱(auto-unboxing). 我们知道,Java 语言拥有 8 个基本类型,每个基本类型都有对应的包装(wrapper)类型. 之所以需要包装类型,是因为许多 Java 核心类库的 API 都是面向对象的.举个例子,Java 核心类库中的容器类,就只支持引用类型. 当需要一个能够存储数值的容器类时,我们往往定义一个存储包装类对象的容器. 对于基本类型的数值来说,我们需要先将其转换为对应的包装类,再存…
语法糖(Syntactic Sugar):也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用.通常来说,使用语法糖能够增加程序的可读性,减少程序代码出错的机会. 相对于C#及许多其他JVM来说,Java在现代编译语言之中属于“低糖语言”.尤其是JDK1.5之前的版本,“低糖”语法也是java语言被怀疑已经“落后”的一个表现方面. 在Javac的源码中,解语法糖的过程由desugar()方法触发,在com.sun.tools.javac.comp.Tr…
语法糖 语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语.指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错 的机会:但是这种语法对语言的功能并没有影响. Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是,下面做简单的介绍和分析. 泛型         与C#中的泛型相比,Java的泛型可以算是“伪泛型”了.在C#中,不论是在程序源码…
语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法.语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读.不过其并没有给语言添加什么新东西. 也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用.通常来说,使用语法糖能够增加程序的可读性,减少程序…
变长参数概念 在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用.形如 function(T …args).但是需要明确的一点是,java方法的变长参数只是语法糖,其本质上还是将变长的实际参数 varargs 包装为一个数组. 看下面的例子: 12345678910111213 public class VariVargs { public static void main(String []args) { tes…
首先请看如下代码: public class Test{ public static void main(String str[]) { Hashtable h =new Hashtable(); h.put(1, "String类型"); int a = (String) h.get(1); System.out.println(a); } } //执行javac Test.java结果显示:不兼容的类型: String无法转换为int//1.红色标出的String改为int 2.执…
知乎上这篇文章对于游戏后端.性能并发.nodejs及scala等语言的讨论,很好,值得好好看. https://www.zhihu.com/question/21971645 经常了解一些牛逼技术人员的分享,比闭门造车或者停留在陈旧技术固步自封,要好多了. 下面是一些摘录: 用C++开发,1000并发是基本. C++的优点是与硬件近,所以处理图形时速度快很多, 如果是处理业务,其实主要是看选用的算法的时间复杂度. 各语言之间的执行效率差别没那么大,同样用过C++跟JAVA,相比较的话JAVA的学…