Java具有基本类型的对象,整数和基本版本int。Java原始实施
的原始版本是更快/轻的/ etc。所以一般来说你应该使用它们。
我想知道为什么是Java的的设计者们不仅有对象类型,并使用原始版本的幕后优化。
所以:
Integer foo(Integer alpha)
{
Integer total = 0;
for(Integer counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
会被编译成代码是这样的:
int foo(int alpha)
{
int total = 0;
for(int counter = 0; counter < alpha; counter++)
{
total += counter;
}
return total;
}
从本质上讲,这个假设的java编译器将整数,双,浮法,等的情况下,转换成相当于原始类型。只有在确实需要对象的情况下(比如将元素放入容器中)才会涉及实际的Integer对象。
注意:上面的代码已经在Integer对象上使用了运算符,我知道这些运算符实际上是不允许的。由于我正在发明假想的Java编译器,因此我会假装这一个像Integer/Float/Double一样具有特殊的外壳,就像它为String一样。
不是一个完全重复的,但我涵盖了很多的http://stackoverflow.com/questions/5199359/why-do-people-still-use-primitive-types-in-java – corsiKa
@glowcoder这个信息,我知道这一切。但是我想知道是否有什么会阻止Java在幕后执行所有这些操作,并且不让我们担心。也就是说,我们不需要担心性能问题,因为编译器似乎很容易将Long的使用转换为long。 –
一个大问题是,你的例子只是简单的。我很高兴java有原始的东西;他们直接映射到硬件,我从来没有把它们视为障碍。要求极端逃脱分析工具只是要求太高。想象Integer [],你认为如何优化,逃避分析并生成与int []相同的代码(因为Integer可以为空)。更多的Integer是不可变的,并且有一个最终的字段,可以阻止某些优化并需要进一步的分析。 – bestsss