Java原始types:int与整数

我很困惑什么时候在Java中使用原始types和非原始types(即int和Integer)。 我意识到在某些地方你不能使用原始types(例如在使用generics时 )。 但是在“正常”的代码呢? 使用非原始types会有性能损失吗? 如何使用Android?

***我的问题与以下其中一张海报发现的问题非常相似。 链接的问题的答案给了这个问题更多的见解,这些问题不在下面。

***“非原始”types被正式称为参考types。

Solutions Collecting From Web of "Java原始types:int与整数"

简短的回答:一个int是一个数字; Integer是一个可以引用包含数字的对象的指针。 使用Integer算术涉及更多的CPU周期并消耗更多的内存。 一个int不是一个对象,不能传递给需要对象的任何方法(就像你所说的关于generics一样)。

非原始types是对象。 他们必须dynamic分配,垃圾收集,并检查无效(虽然其中一些操作可能会被优化编译器删除)。 读取它们的实际值需要从指针加载。 原始types是值。 他们通常占用更less的空间,访问速度更快。

一个好的经验法则是, 除非需要多态, 否则使用基本types,在这种情况下使用相应的对象。

types( 自动装箱 )之间转换有轻微的惩罚。 int也会less一些开销,所以如果可以的话,我总是会用int

另请参见此问题: 何时使用Java中的基本types和引用types

作为一个面向对象的纯粹主义者,你可能会完全避开原语,并且会损害性能成本和后缀运算符的缺乏。 (是的,这是一个性能成本。)你也可以采用这种方法,只是从扩展性考虑作为一个devise师(没有必要挂在纯度上)。

作为一个实际问题(在理论和美学问题之外),在任何地方都可以使用原语,并使用不能使用原语的对象版本。 (你已经提到过这种情况,语言和API会推动这个决定。)

作为一个performance怪胎,你可能会回避对象的版本,如果你踩一些OO的黄金规则和神圣不可行,你可能不会太在意:performance是王道,你做出相应的决定。

我build议select2作为一个好地方开始,直到你发展自己的教条偏好! 🙂

我的观点:使用Integer作为参数或返回值允许一个原始的整数不允许:使用null 。 但这是一个好主意吗? 我认为这很less有。

就性能而言:编译器会在一定程度上优化您的代码,所以大部分时间都不是真正的问题。