原始类型与封装类:在Java中使用哪一个?
虽然看起来是一件小事,但它对你的代码有很大的影响。
在这篇短文中,我将带领大家了解原始类型和封装类的区别和实现,以及错误使用时的相关后果。
什么是原始类型和封装类?
虽然我们很多人都知道它们的含义,但还是让我简单介绍一下吧
原始类型
原始数据类型规定了变量值的大小和类型,它没有额外的方法。
包裹类
封装类提供了一种将原始数据类型 (int,boolean, 等等.) 作为对象使用的方法。
与上述解释的一个主要区别是,原始类型的默认值取决于类型,如int is 0,char is \u0000,boolean is false 等,但所有类型的封装类的默认值是null ,因为它们是对象。
使用哪一个呢?
原始类型和包装类都需要在代码中使用,这取决于你希望你的代码如何表现。虽然这听起来很困难,但我将用例子来介绍大部分的使用情况,以帮助你更好地理解它。
当不确定该使用什么时,总是使用原始类型
在写代码时,用问题而不是解决方案来驱动自己。这是什么意思?
- 如果我使用
int,而不是Integer,会发生什么? - 如果我使用
String常数而不是枚举,会发生什么? - 如果我使用
Boolean,而不是 ,会发生什么?boolean - 等等...。
既然如此,让我们看看这些问题如何帮助我们使用正确的数据类型。
让我们来分析一下上述代码
- 纬度和经度的默认值是什么,直到托运被分配?
0.0, 0.0?不是,因为它是一个适当的位置,所以它必须是空的,直到它被分配,因此我们使用Float,而不是float isActive能否为空?这将意味着什么?一个东西要么是活跃的,要么是不活跃的,不存在第三种状态的活跃,因此boolean- 一个产品的重量可以是0吗? 极不可能。因此,我们在上述代码中使用的
float是不正确的,因为它在代码中使用时可能会产生错误的结果。 - 在
OrderManagementService.java接口中,我使用了同样的概念,例如userId需要是一个有效的值,不能为空。
其他情况下,我们可以从应用程序本身驱动正确的数据类型
数据库模型
- 数据库可以有各种类型的值,包括null,所以模型对象或实体必须始终有封装类。
DTOs(请求和响应)
- 用于请求和响应的DTOs 可以如果你的API设计中包含了nullable的值,就需要有封装类。
实现和解决方案
- 具有局部范围的变量总是原始类型的
- 字段变量应该是原始的,除非它不能满足我们关于其使用的问题。
后果
NullPointerException当不正确地使用封装类时,会产生一些后果- 不正确地使用原始类型时的意外默认值
- 调试的日子(如果你不知道如何使用IDE中的调试器)。
- 不正确地使用封装类时的额外内存用量
后记
这些概念很好理解,一旦你理解了它们背后的概念,就很容易实现。请在下面的评论中分享你的观点。