public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
它需要43秒才能跑完。把 Long 引入到原语中可以使它缩短到6.8秒... ... 如果这就是我们使用原语的原因的话。
缺乏本机值相等性也是一个问题(与 ==相比,.equals()相当冗长)
对于 biziclop 来说:
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
int loops = 100000000;
long start = System.currentTimeMillis();
for (Long l = new Long(0); l<loops;l++) {
//System.out.println("Long: "+l);
}
System.out.println("Milliseconds taken to loop '"+loops+"' times around Long: "+ (System.currentTimeMillis()- start));
start = System.currentTimeMillis();
for (long l = 0; l<loops;l++) {
//System.out.println("long: "+l);
}
System.out.println("Milliseconds taken to loop '"+loops+"' times around long: "+ (System.currentTimeMillis()- start));
在 Long: 468上循环’100000000’所花费的毫秒
在“1000000000”周期内循环所需的毫秒长度: 31
顺便说一句,我不介意看到这样的东西进入 Java。
Integer loop1 = new Integer(0);
for (loop1.lessThan(1000)) {
...
}
其中 for 循环自动将 loop 1从0递增到1000
或者
Integer loop1 = new Integer(1000);
for (loop1.greaterThan(0)) {
...
}