What is java语法糖

What is java语法糖

  语法糖可以看做是编译器实现的一些小把戏,这些小把戏可能会使得效率“大提升”。、

泛型和类型擦除

  Java的泛型是JDK1.5版本之后才有的特性,在没泛型特性之前,只能通过Object是所有类的父类和类型强制转换来实现类型泛化。对于这种依靠Object很容易在强制转换时发生ClassCastException。

  java的泛型和c++,c#的泛型不一样,他们的泛型在运行期间可以获得自己的类型信息,这种泛型方法也叫真泛型。java里面就不同了,只能在程序源码中存在,在编译后的字节码文件已经替换为裸类型,并在形影的地方插入了强制转型的代码。

  泛型擦除前的代码:

public static void main(String[] args)
{  
List<String> stringList = new ArrayList<String>(); 
stringList.add("kobe");  
System.out.println(stringList.get(0));  
}  

擦除后的:

public static void main(String args[])
{
List stringList = new ArrayList();
stringList.add("kobe");
System.out.println((String)stringList.get(0));
}

注:

  泛型遇见重载的时候,是不允许的,除非只要返回值不同(这里不是说返回值参与了重载的判断,返回值是不会包含在方法的特征签名之中),改变了描述符,就可以在Class文件格式中保存。

自动装箱,拆箱与遍历循环

  自动拆箱/装箱是在编译期,依据代码的语法,决定是否进行拆箱和装箱动作。

  装箱过程:把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征。

  拆箱过程:与装箱过程相反,把包装类型转换成基本类型。

  循环遍历:foreach要求被历遍的对象要实现Iterable接口,由此可想而知,foreach迭代也是调用底层的迭代器实现的。

List<Integer> list = new ArrayList<Integer>();  
    for(Integer num : list){  
    System.out.println(num);  
}  

反编译后:

List list = new ArrayList();  
Integer num;  
Integer num;  
for (Iterator iterator = list.iterator(); iterator.hasNext(); System.out.println(num)){  
num = (Integer) iterator.next();  
   }  

条件编译

  很多编程语言都提供了条件编译的途径,C,C++中使用#ifdef。Java语言并没有提供这种预编译功能,但是Java也能实现预编译。

if(true){  
    System.out.println("kone");  
}else{  
    System.out.println("yyy");  
}  

反编译后

System.out.println("kone");

只要在编译期就能确定的条件,都会消除分支。
当然还有很多的语法糖,这里就不一一列举了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值