语法糖
编译器实现的小把戏,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以用了
这些方法不会为程序提供任何实质性的功能改进,但是他们可以提高性能,提升语法的严谨性,减少编码出错的机会
可变长度参数
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方法