java语法糖
语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。
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)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
}
枚举类型:见下一篇