为什么在Java中其他所有东西都是对象的情况下,有对基本数据类型的支持。尽管Java确实提供了所有基本数据类型的Wrapper类
我们使用原语是因为它们很快。为什么人们仍然在Java中使用基本类型?快速参考
在Joshua Bloch的Effective Java中,Item 5:"避免创建不必要的对象",他发布了以下代码示例:
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()
相当冗长)
:
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));
}
}
结果:
C:Documents and SettingsglowMy Documents>java biziclop
false
false
true
false
因为自动装箱....http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html。你会在那里找到答案的。
另一个解释,摘自这里:
并不是Java中的所有东西都是对象。有一组特殊的数据中经常使用的类型(也称为基本类型)你的编程。出于性能原因,Java的设计者语言决定包含这些基本类型。
使用new创建对象效率不高,因为new会将对象放在堆上。这种方法的成本非常高小而简单的变量。与使用new创建变量不同,Java可以使用基本类型来创建自动变量不引用。变量保存着这个值,它被放在栈,所以效率更高