语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。
Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是
泛型定义java的泛型只在源代码存在,只供编辑器检查使用,编译后的字节码文件已擦除了泛型类型(类型T不确定)
将上面的代码的字节码反编译后:
public static void main(String args[]) { List stringList = new ArrayList(); stringList.add("oliver"); System.out.println((String)stringList.get(0)); }
自动拆箱/装箱
再探拆箱装箱:
public static void main(String[] args){ Integer i = 100; //System.out.println(i.intValue());//100,将对象拆箱成基本数据类型 Integer i1 = 2255; Integer i2 = 2255; System.out.println(i1==i2); //false 不是从缓冲池里面拿的 System.out.println(i1.equals(i2));//内容肯定是相同的 Integer g1 =10; Integer g2 =10; System.out.println(g1==g2); //true System.out.println(g1.equals(g2));//true
//Interger只在某个特定范围才是从缓存拿来的
//而String类型的不论什么,都是缓存的
Boolean b1 = false; Boolean b2 = false; System.out.println(b1==b2); //true System.out.println(b1.equals(b2));//true String s1= "abc"; String s2 ="abc"; System.out.println(s1==s1); //true System.out.println(s1.equals(s2));//true System.out.println("is equals?"+new String("abc").equals(new String("abc")));//true System.out.println("is equals?"+new String("abc")==(new String("abc"))); //false
/** * 针对String作为一个基本类型来使用: 1。如果String作为一个基本类型来使用,那么我们视此String对象是String缓冲池所拥有的。 2。如果String作为一个基本类型来使用,并且此时String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。 3。如果String作为一个基本类型来使用,并且此时String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。 */ }
Java 可变长参数
public static void main(String[] args) { System.out.println(add(2, 3)); // 5 System.out.println(add(2, 3, 5));// 10 } static int add(int x, int ...args) { int sum = x; for (int i = 0; i < args.length; i++) { sum += args[i]; } return sum; }
public static void main(String[] args) { print(); print("hello"); print("hello","lisi"); print("hello","张三", "alexia"); /** * hello hello lisi hello 张三 alexia */ System.out.println("加"+add()); // 0.0 System.out.println("加"+add(1.0+2.3)); //3.3 System.out.println("加"+add(1.0+2.2+0.1));//3.3 }
//用户传入若干个double型数字,然后进行相加 static double add(double ...args){ double sum= 0 ; for(double i :args) sum+=i; return sum; } //在具有可变长参数的方法中可以把参数当成数组使用,例如可以循环输出所有的参数值。 static void print(String... args){ String str = ""; for(String temp:args) str = str+" "+temp; // System.out.println(temp); System.out.println(str); } //适用于参数个数不确定,类型确定的情况 可变参数的特点: (1)、只能出现在参数列表的最后; (2)、...位于变量类型和变量名之间,前后有无空格都可以; (3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。 }
枚举类型:见下一篇