什么情况下我应该选择包装类(wrapper class)而不是基本类型(primitive types)?或者在什么情况下我应该在包装类和基本类型之间进行选择?
什么情况下我应该选择包装类(wrapper class)而不是基本类型(primitive types)?或者在什么情况下我应该在包装类和基本类型之间进行选择?
有人提到某些构造如Collections
需要对象,而对象比原始类型(内存和装箱)更耗费资源。
另一个考虑因素是:
初始化对象为null
或将null
参数传递给方法/构造函数以表示状态或功能非常方便,但无法用原始类型实现。
许多程序员将数字初始化为0(默认值)或-1来表示这一点,但取决于情况,这可能是不正确或具有误导性的。
这也会为之后出现的一些错误设置了舞台,例如NullPointerException
,这比在代码中随意出现的其他错误更加友好。
Integer
比int
更易读的原因。 - Stephen Cclass Person {
int SSN ; // gets initialized to zero by default
}
2.
class PersonBetter {
Integer SSN; //gets initialized to null by default
}
PersonBuilder
的类,在调用“build”以获取 Person
实例之前,如果没有设置社会安全号码,则会抛出异常。我认为这样做有些过度,但这是Java语言推广正确设计模式的方式。 - Sandy Chapman如果没有必要,我只会使用包装类型。
使用它们并没有太多好处,除了它们是Objects
之外。
而且,你会失去内存使用和时间开销上的开销。
对于由数字计算主导的应用程序,使用原始类型可以极大地提高性能。
对于原始类型,使用==运算符,但对于包装器,最好调用equals()方法。
“原始类型被认为是有害的”,因为它们将“过程语义混入一个否则统一的面向对象模型中。”
许多程序员将数字初始化为0(默认)或-1以表示这一点,但根据情况,这可能是不正确或误导性的。
集合是简单Java包装对象的典型情况。然而,您可能会考虑在代码中给Wrapper一个更具体的含义(值对象)。
在我看来,几乎总是有利于使用值对象,因为这有助于提高代码的可读性和可维护性。当简单数据结构需要承担某些职责时,将其包装在对象内通常可以简化代码。这在领域驱动设计中非常重要。
当然,还存在性能问题,但我倾向于忽略它,直到我有可能使用适当的数据测量性能并对有问题的区域采取更有针对性的行动。如果代码易于理解,也可能更容易理解性能问题。
如果你想使用集合,你必须使用包装类。
原始类型用于数组。此外,用于表示没有行为的数据,例如计数器或布尔条件。
自动装箱后,“何时使用原始类型或包装类”这个界限变得相当模糊。
但请记住,包装器是对象,因此您可以获得所有花哨的Java功能。例如,您可以使用反射创建Integer对象,但不能创建int值。包装类还具有诸如valueOf之类的方法。
何时使用原始类型
何时使用包装类
来自https://medium.com/@bpnorlander/java-understanding-primitive-types-and-wrapper-objects-a6798fb2afe9
Java中的原始值不是对象。为了将这些值作为对象进行操作,java.lang包为每种原始数据类型提供了一个包装类。
所有包装类都是final的。可以初始化所有包装类的对象都是不可变的,这意味着包装对象中的值不能被更改。
虽然void类被认为是一个包装类,但它不包装任何原始值,也不能被初始化。它没有公共构造函数,只表示代表关键字void的类对象。