永远不要跟别人比幸运,我从来没想过我比别人幸运,我也许比他们更有毅力,在最困难的时候,他们熬不住了,我可以多熬一秒钟、两秒钟,甚至更久。

java中的语法糖之自动拆箱、装箱与遍历循环

Java 新民 209℃ 已收录 1评论

在上一篇文章中,主要介绍了语法糖的概念以及泛型和类型擦除,不明白的同学可以阅读《Java中的语法糖之泛型与类型擦除》。在这一边文章中,主要介绍Java中的自动拆箱、装箱与循环遍历语法糖

以纯技术的角度来看,自动拆箱、装箱与遍历循环可以说是我们平常编码时用的最多的语法糖。先举个例子,来看看系列的代码中语法糖在编译会发生什么:

 

	public static void main(String[] args) {
		
		List list = Arrays.asList(1,2,3,4);
		
		// 如果在JDK1.7中,还有另外一颗语法糖
		// 能让上面这句代码进一步简写成     List list = [1,2,3,4];
		
		int sum = 0 ;
		
		for (int i : list) {
			sum +=i; 
		}
		System.out.println(sum);
	}

以上代码是编译前的源码,在下面看看编译后的代码:

	public static void main(String[] args) {
		List list = Arrays.asList(new Integer[] {
			Integer.valueOf(1),
			Integer.valueOf(2),	
			Integer.valueOf(3),	
			Integer.valueOf(4),	
		});
		
		int sum = 0 ;
		
		for(Iterator localIterator = list.iterator();localIterator.hasNext();) {
			int i  = ((Integer)localIterator.next()).intValue();
			sum += i;
		}
		System.out.println(sum);
	}

上面代码中,一共包含了泛型,自动拆箱、自动装箱、遍历循环与边长参数五种语法糖,并且也展示了编译后的变化,泛型在《Java 中的语法糖之泛型与类型擦除》一文中已经介绍过了,这里就不多说了。自动拆箱、装箱在编译后被转换成了对应的包装和还原方法。Integer.valueOf() 和 Integer.intValue() 方法。而遍历则是还原成了迭代器的实现,这也是为何遍历循环需要被遍历的看类实现Iterable 接口的原因。最后再看看变长参数,他在调用的时候变成了数组类型的参数,在变长参数出现之前,程序员就是使用数组来完成类似功能的。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://www.snowruin.com/?p=1749
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)条精彩评论。
  1. 到你的博客走一趟,如同阳光洒在我脸上,心里暖洋洋!
    罗拉套图网2018-08-02 09:10 回复| Google Chrome 14.0.802.30| Windows 7