文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Java Autoboxing 的优缺点

Java Autoboxing 的优缺点

时间:2010-09-26  来源:btpka3

     


/**
 *
 * The Advantages and Traps of Autoboxing
 *
 * 优点:
 * 1. 代码更简洁
 * 2. 自动使用最优的转换代码(比如使用Integer.valueOf(int),而不是使用new Integer(int))
 *
 * 缺点:
 * 1. 如果不注意,可能会导致错误
 * 2. 如果不注意,可能会导致效率低下
 * 3. 有时需要强制类型转换。
 *
 * 参考:http://javaeffective.wordpress.com/2010/05/21/the-advantages-and-traps-of-autoboxing/
 *
 */
public class M {

    public static void main(String[] args) {

        // 导致错误

        Long longValue1 = 99L;
        System.out.println(longValue1.equals(99L)); // true

        System.out.println(longValue1.equals(99)); // false

        System.out.println(longValue1 == 99L); // true

        System.out.println(longValue1 == 99); // true


        long t1;
        long t2;
        // 导致效率低下

        // 实验组 1

        t1 = System.currentTimeMillis();
        Long counter1 = 0L; // Long counter = 0; 会报错!!!

        for (long i = 0; i < 100000000; i++) {
            counter1++; // 等价于 Long.valueOf(counter1.longValue() + 1)

        }
        t2 = System.currentTimeMillis();
        System.out.println("time1 = " + (t2 - t1)); // 1625


        // 实验组 2

        t1 = System.currentTimeMillis();
        long counter2 = 0;
        for (long i = 0; i < 100000000; i++) {
            counter2++;
        }
        t2 = System.currentTimeMillis();
        System.out.println("time2 = " + (t2 - t1)); // 297


        // Integer : 1 + 2 = 3

        // 需强制类型转换,否则调用printSum(long, long)

        // 强制转换为 int也会调用printSum(long, long)

        printSum((Integer) 1, (Integer) 2);

        // Long1 : 1 + 2 = 3

        printSum(1L, 2L);

        // 需强制类型转换

        // Long2 : 1 + 2 = 3

        printSum((Long) 1L, (Long) 2L);

        // Float : 1.0 + 2.0 = 3.0

        printSum(1F, 2F);

        // Double : 1.0 + 2.0 = 3.0

        printSum(1D, 2D);
    }
    
    public static void printSum(long a, long b) {
        System.out.println("Long1 : " + a + " + " + b + " = " + (a + b)); // true

    }
    
    public static void printSum(Long a, Long b) {
        System.out.println("Long2 : " + a + " + " + b + " = " + (a + b)); // true

    }

    public static void printSum(Integer a, Integer b) {
        System.out.println("Integer : " + a + " + " + b + " = " + (a + b)); // true

    }

    public static void printSum(Float a, Float b) {
        System.out.println("Float : " + a + " + " + b + " = " + (a + b)); // true

    }

    public static void printSum(Double a, Double b) {
        System.out.println("Double : " + a + " + " + b + " = " + (a + b)); // true

    }
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载