为什么人们仍然在Java中使用原语类型?

为什么人们仍然在Java中使用原语类型?

从Java 5开始,我们对原始类型进行了装箱/取消装箱,以便int被包装成java.lang.Integer等等。

我最近看到了许多新的Java项目(一定需要至少版本5(如果不是6)的JRE。int而不是java.lang.Integer,尽管使用后者要方便得多,因为它有一些用于转换为long价值观等

为什么仍然在Java中使用原语类型?是否有任何实际的好处?


小唯快跑啊
浏览 623回答 3
3回答

慕哥6287543

在约书亚·布洛赫有效Java第5项:“避免创建不必要的对象”,他发布了以下代码示例:public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Long&nbsp;sum&nbsp;=&nbsp;0L;&nbsp;//&nbsp;uses&nbsp;Long,&nbsp;not&nbsp;long &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(long&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<=&nbsp;Integer.MAX_VALUE;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sum);}它需要43秒才能运行。将长时间带入原始状态使其缩短到6.8秒.如果这说明了为什么我们使用原语。本土价值平等的缺失也是一个令人关注的问题(.equals()与==)对于biziclop:class&nbsp;Biziclop&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(new&nbsp;Integer(5)&nbsp;==&nbsp;new&nbsp;Integer(5)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(new&nbsp;Integer(500)&nbsp;==&nbsp;new&nbsp;Integer(500)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Integer.valueOf(5)&nbsp;==&nbsp;Integer.valueOf(5)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Integer.valueOf(500)&nbsp;==&nbsp;Integer.valueOf(500)); &nbsp;&nbsp;&nbsp;&nbsp;}}成果如下:false false true false编辑&nbsp;为什么(3)返回true和(4)返回false?因为它们是两个不同的物体。JVM缓存最接近于零的256个整数[-128;127],因此它们为这些整数返回相同的对象。但是,超出了这个范围,就不会缓存它们,因此会创建一个新的对象。为了使事情变得更复杂,JLS要求至少256飞行重量被缓存。JVM实现者可能会添加更多,如果他们愿意,这意味着这可能运行在一个系统,其中最近的1024缓存,并所有他们返回真.#尴尬

白板的微信

自动拳击会导致难以识别NPEs。Integer&nbsp;in&nbsp;=&nbsp;null;......int&nbsp;i&nbsp;=&nbsp;in;&nbsp;//&nbsp;NPE&nbsp;at&nbsp;runtime在大多数情况下,空赋值为in比上面要明显得多。

慕桂英3389331

原始类型:int&nbsp;x&nbsp;=&nbsp;1000;int&nbsp;y&nbsp;=&nbsp;1000;现在评估:x&nbsp;==&nbsp;y它是true..没什么好奇怪的。现在尝试装箱类型:Integer&nbsp;x&nbsp;=&nbsp;1000;Integer&nbsp;y&nbsp;=&nbsp;1000;现在评估:x&nbsp;==&nbsp;y它是false..可能吧。取决于运行时。这理由够吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java