当前位置: 首页 > 面试题库 >

如何在Java中呈现可为空的原始类型int?

张高澹
2023-03-14
问题内容

我正在设计一个实体类,该实体类具有一个名为“
documentYear”的字段,该字段可能具有无符号整数值,例如1999、2006等。与此同时,此字段也可能是“未知”的,也就是说,不确定该文档的年份创建。

因此,像C#中的可为null的 int 类型将非常适合。但是,Java没有C#具有的可为空的功能。

我有两个选择,但我都不喜欢:

  1. 使用java.lang.Integer代替基本类型int;
  2. 使用-1表示“未知”值

有谁有更好的选择或想法?

更新 :我的实体类将具有数万个实例;因此,java.lang.Integer的开销对于系统的整体性能而言可能太重了。


问题答案:

您将不得不放弃原始类型或使用任意int值作为“无效年份”。

负值实际上是一个不错的选择,因为很少有有效的年份会导致整数溢出,并且没有有效的负年份。



 类似资料:
  • 我试着搜索像Multi-raw类型的东西,但我没有找到任何东西。 我该怎么做?

  • 问题:我将使用@vlad-mihalcea的[Hibernate-Types][1],我需要为实体中的原始JSON值实现一个Hibernate类型: 对于(string)'JSON'类型,我实现了: 对于(二进制)'JSONB'类型: 但是当我测试它时,它失败了,如下所示: 原因:org.PostgreSQL.util.psqlException:错误:列“Rawjson”是json类型,但表达式

  • 问题内容: 如果有Wrapper类使Java成为纯面向对象的语言,那么为什么会有可在Java中使用的Primitive数据类型呢? 问题答案: 为了效率。基本类型的变量直接包含值。非基本类型的变量是引用,引用存储在内存中其他位置的对象。 每次您需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。对于原始类型,这不是必需的,因为变量本身包含值,而不是对包含该值的对象的引用。 但是,这不

  • 问题内容: 我正在尝试这样做,但是不起作用: 我应该如何正确地做到这一点? 问题答案: 您不能,因为基元不是对象。 您目前正在尝试的还没有实例化- 它正在加载一个类。但是您不能对原始对象执行此操作。确实是用于类型的名称,无论何时获取其对象(例如,通过反射),但您都无法使用加载它。 参考:反射教程: 如果一个类的全限定名称可用,则可以使用静态方法Class.forName()获得相应的Class。

  • 问题内容: 我目前正在尝试从书中学习如何使用泛型。在本章中,它说取一条数据T并将其转换为整数。我正在Eclipse中尝试不同的方法,但是似乎都不允许这样做。您如何执行以下任务: 然后在另一个类中: 我已经尝试使用和其他一些东西,但似乎没有什么能使Java满意。本书坚持要保持方法的通用性,以防使用浮点数或双精度数代替字符串或整数。 编辑:对于其他人可能有类似的问题。从对这个问题的所有评论和被接受的答

  • 我引用Herbert Schildt第3章数据类型、变量和数组: 基元类型表示单个值,而不是复杂的对象。虽然Java在其他方面是完全面向对象的,但基元类型不是。这种效率的原因。制作基元类型会使性能降低太多。 基元类型被定义为具有显式范围和数学行为。像C、C++这样的语言允许整数的大小根据执行环境的指令而变化。然而,Java不同。由于Java的可移植性要求,所有数据类型都有一个强定义的范围。例如,i