Java语法糖

语法糖

编译器实现的小把戏,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以用了

这些方法不会为程序提供任何实质性的功能改进,但是他们可以提高性能,提升语法的严谨性,减少编码出错的机会

可变长度参数

1、可以使用遍历数组的方式去遍历可变参数

2、可变参数是利用数组实现的

3、可变长度参数必须作为方法参数列表中的最后一个参数

4、方法参数列表中只能有一个可变长度参数

foreach循环遍历原理

编译的时候编译器会自动将for这个关键字的使用转化为对目标的迭代器的使用,这就是foreach的循环原理

任何一个集合,不论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确的实现iterable接口,这就是23种常用的设计模式中的迭代器模式。

如果不实现这个接口,那在集合中使用foreach遍历时就会报空指针异常

但是数组中并没有实现iterator接口,那为什么可以直接使用iterator接口????后面详细了解了再更新

自动拆箱和自动装箱

Java为每种基本数据类型都提供了对应的包装器类型。例如:

public class TestMain
{
   public static void main(String[] args)
   {
       Integer i = 10;    //自动根据数值创建对应的Integer对象,就是自动装箱
   }
}

public class TestMain
{
   public static void main(String[] args)
   {
       Integer integer = 10;
       int i = integer;   //根据包装器类型自动将数据转换为基本类型,这就是自动拆箱
   }
}

原理:

自动装箱:Java虚拟机会自动调用Integer的valueOf方法

自动拆箱:Java虚拟机会自动调用Integer的intValue方法