原始类型与封装类:在Java中使用哪一个?

465 阅读3分钟

原始类型与封装类:在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中的调试器)。
  • 不正确地使用封装类时的额外内存用量

后记

这些概念很好理解,一旦你理解了它们背后的概念,就很容易实现。请在下面的评论中分享你的观点。