java高新技术总结(一)

   JDK5的一些新特性大都在编译器上面下功夫,这没办法,java虚拟机的指令集是不能变得。这也使得java中的泛型有很大的局限性。

静态导入:

 


语法:import static  静态方法的完整路径
import static 语句是写给编译器看的,并没有设计或者效率上的优化。JDK5增加这种特性只是增加代码的可读性。

 

 

可变参数:
语法:void XXX(Object... args)

反汇编的结果为

可以看出sum接收的参数仍为数组,也可以把数组参数传递给sum方法。在通过可变参数的传递参数是,会将参数的内容组合成一个数组。数组的长度
由可变参数的个数决定。

增强for循环
语法:for(T t :ts)

反汇编的结果为:

增强for循环的语句要求要操作的结合必须实现Iterable接口。从编译结果可以看出,增强for循环的写法完全可以写成这样
   List l = new ArrayList();
   Iterator itor = l.iterator();
   while(itor.hasNext){
     Object o = itor.next;
   }
   但是这样写显然很繁琐,所以增强for循环可以使得代码更加简洁。但是要慎用这个语句,如下代码所示
   Iterable iterable = new ArrayList();
   for(Object o :iterable){
   }
   因为Iterable接口有数十个实现类,这意味着在调用iterator()方法是会解析这些类。如果这样的程序运行在android手机上,那你的程序比相对于
别人的程序,可谓是蚁行了。

 

 

自动拆箱和装箱
     Integer i = 0;
    Integer ii = 0;
    boolean b = i ==ii;
    Integer i2 = 128;
    Integer ii2 = 128;
    boolean b2 = i2 == ii2;
    Object o = new Object[]{1,"1"};
    int i3 = new Integer(1);
    int i4 = new Integer(128);
 反编译结果为

其实自动装箱就是调用包装类的静态方法valueOf(),为什么没有直接new呢,我们来看看valueOf方法的源码:
   public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }
    Integer有个IntegerCache内部静态类,缓存值为-128~127的整数。调用valueOf()方法是会判断参数是否在-128~127之间,如果是就检查缓存中
是否有值相同的Integer对象,如果有就返回。如果没有就创建,并缓存起来。所以上面的程序中b的值为true,b2的值为false。在java语言规范中有
这样的说明,一个字节(byte)或者一个字符(char)的范围在/u0000到/u007f之间或是int值在-128~127中用valueOf()方法返回的值是==的。至于
为什么这样做我也不太清楚。
  自动拆箱就是调用包装类的xxxValue()方法(如果是int就是intValue())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值