/**
* 泛型 ,
* 此示例包含泛型,自动装箱,自动拆箱,遍历循环,变长参数 5种语法糖
*/
public class Generics {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
int sum = 0;
for (int i : list) {
sum +=i;
}
System.out.println(sum);
}
}
包装类的“ == ”运算在不遇到算术运算的情况下不会自动拆箱,以及他们equals()方法不处理数据转型的关系。
public class Generics1 {
public static void main(String[] args) {
Integer a =1;
Integer b =2;
Integer c =3;
Integer d =3;
Integer e =321;
Integer f =321;
Long g =3L;
//这里c等于d是因为integer有缓冲,其缓冲范围在-128=127之间,
// 所以在c和d都不是new出来的,他们复用了相同的取值空间,那么c和d自然相等
System.out.println(c==d);
//e和f=false,是因为他们的值超出了integer的缓冲范围,既然超过了缓冲范围,默认integer是new出来的,
//所以2个变量都开辟了新的空间,就等于false
System.out.println(e==f);
//a和b相加,jvm拆箱,转成了int,int值对比自然相等
System.out.println(c==(a+b));
//integer的equals方法判断是否是integer,遇到了a和b结果是int,自动装箱成intger,然后再判断int值是否相等
System.out.println(c.equals(a+b));
//Long类型的cache缓冲是正的256,a和b相加结果是int,g拆箱成int判断的相等,类似g调用了intValue然后判断
System.out.println(g==(a+b));
//Long的equals先判断参数是否是Long类型,integer不是Loan类型,自然是false
System.out.println(g.equals(a+b));
}
}
除了泛型,自动装箱,自动拆箱,遍历循环,变长参数,条件编译之外,Java,还有其他语法糖,如内部类,枚举类,断言语句,switch对枚举和字符串的支持,try语句中定义个关闭资源。