Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Java中表示可空基元类型int?

如何在Java中表示可空基元类型int?
EN

Stack Overflow用户
提问于 2009-06-11 21:28:41
回答 13查看 45.7K关注 0票数 33

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

因此,可空的int类型(如C# )非常适合。但是,Java没有C#那样的可空特性。

我有两种选择,但我不喜欢这两种:

  1. 使用java.lang.Integer代替原语类型int
  2. 使用-1表示“未知”值。

有没有人有更好的选择或想法?

更新:我的实体类将有数以万计的实例;因此,java.lang.Integer的开销对于系统的总体性能来说可能太重了。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-06-11 21:36:25

您将不得不放弃原语类型,或者使用一些任意的int值作为“无效年份”。

负值实际上是一个很好的选择,因为有一个有效年份的可能性很小,这会导致整数溢出,并且没有有效的负年份。

票数 27
EN

Stack Overflow用户

发布于 2009-06-11 21:32:46

在这里使用Integer类可能是您想要做的。与对象相关的开销对应用程序的总体响应性和性能来说很可能(虽然不一定)微不足道。

票数 33
EN

Stack Overflow用户

发布于 2009-06-11 22:15:48

数以万计的Integer实例并不多。考虑花费几百千字节,而不是过早地优化。为了正确起见,这是一个小小的代价。

小心使用哨兵值,如null0。这基本上等同于说谎,因为0不是一年,而null也不是整数。一个常见的bug来源,特别是当你不是软件的唯一维护者的时候。

考虑使用类似于Option的类型安全null,有时称为Maybe。在Scala和Haskell这样的语言中很流行,这就像一个包含一个或零个元素的容器。您的字段将具有类型Option<Integer>,它向类型系统宣传您的年份字段的可选性质,并强制其他代码处理可能缺少的年份。

这里有一个包含选项类型的库。

如果您正在使用代码,下面是如何调用代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
partyLikeIts.setDocumentYear(Option.some(1999));

Option<Integer> y = doc.getDocumentYear();
if (y.isSome())
   // This doc has a year
else
   // This doc has no year

for (Integer year: y) {
  // This code only executed if the document has a year.
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/985151

复制
相关文章
Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:
Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。 package com.easy.kotlin; import java.util.Optional; import static java.lang.System.out; /** * Optional.ofNullable - 允许传递为 null 参数 * Optional.of - 如果传递的参数是 null,抛出异常 NullPointerEx
一个会写诗的程序员
2018/08/17
2.6K0
Kotlin中的可空类型
Java的NullPointException是经常遇到的异常,也是最让人头疼的一个异常。Kotlin为了解决这个问题,引进了可空类型,将运行时可能发生异常提前到编译期发现。 Kotlin中有可空类型,这种类型表示取值可能为空;而一般类型,则取值不能为空。区别是类型后面有一个?,表示这个类型是可空的。 举个栗子:
用户1108631
2019/08/17
1.5K0
[深入解析C#] 可空值类型
Tony Hoare于1965年在Algol语言中首次引入了null引用的概念,后来他把这项举措称为“十亿美金的过失”。无数开发人员饱受NullReferenceException(.NET)、NullPointerException(Java)等的折磨。由于此类问题的普遍性,Stack Overflow上有大量与之相关的典型问题。既然可空特性如此声名狼藉,为何C# 2以及.NET 2.0要引入可空值类型呢?
科控物联
2022/03/29
2.3K0
.NET中可空值类型实现原理
为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable<T>类型,也可简写为T?。但是Nullable<T>自身是结构体,也是值类型,那么它是如何实现将null赋值给值类型的呢?
雪飞鸿
2018/09/05
1K0
.NET中可空值类型实现原理
C# 可空类型
C#的可空引用类型是一项功能,允许开发人员在变量、参数、字段、属性和返回值等可能为null的情况下,明确地表示其可以为null,或者不能为null。这有助于避免在程序运行时出现空引用异常(Null Reference Exception),提高了代码的安全性和可靠性。通过使用可空引用类型,开发人员可以更早地捕捉到潜在的空引用问题,从而减少了因为空引用而引起的错误。
JusterZhu
2023/10/06
3040
C# 可空类型
xml 里面判断int类型,String类型不为空
目录 1 int类型 2 String类型 1 int类型 <if test="status != null"> and c.status = #{status} </if> 则0和1都可以 所以数字判断的时候,应该是只要判断非空就可以。 2 String类型 <if test="status != null and status != ''"> and c.status = #{status} </if>
一写代码就开心
2022/08/14
1.9K0
java字符串类型转换为int_java中double转int类型
由于double的范围比int数据类型大,所以当int值被赋给double时,java会自动将int值转换为double。
全栈程序员站长
2022/08/03
4.3K0
java中char类型和int类型相加结果是char类型还是int类型?
当然,首先,我们可以肯定的是,这两个是可以相加的。其次,我们要知道他们都是基础类型。最后,我们要明白一点:
Hongten
2018/09/13
2.7K0
java中char类型和int类型相加结果是char类型还是int类型?
Swift可空(Optional)类型基础
可空类型,对于熟悉C#的同学一定不会陌生。在C#里面值类型都是不能为空的,比如int类型默认为0,bool默认为false。但是我们给int加上?后,就是一个可空类型了。
MJ.Zhou
2022/05/07
8700
Swift可空(Optional)类型基础
C#可空值类型
1. 可空类型修饰符(?)   引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。   例如:string str=null; 是正确的,int i=null; 编译器就会报错。
_一级菜鸟
2021/08/10
1.4K0
int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型
使用 Nullable<T> 我们可以为原本不可能为 null 的值类型像引用类型那样提供一个 null 值。不过注意:Nullable<T> 本身也是个 struct,是个值类型哦。这意味着你随时可以调用 .HasValue 这样的方法,而不用担心会出现 NullReferenceException。
walterlv
2020/02/10
1.5K0
C#中的可空类型修饰符
这里说明两个运算符: 可空类型修饰符(?): 官方叫做null-conditional Operators。 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。为了使值类
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.3K0
第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统
我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。
一个会写诗的程序员
2018/08/17
2.1K0
第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统
C# 基元类型
C#编程中,初始化一个整数有两种方式: (1)、较繁琐的方法,代码如下: Int32 a = new Int32(); (2)、极简的方法,代码如下: int a=0; 对比两种方法,分析如下: 第一种:过于繁琐,但是是标准的初始化一个整数的方式 第二种:增强代码可读性,且生成的IL代码与使用第一种方式的一样.支持这种方式声明的数据类型统称为"基元类型"。 "基元类型"直接映射到Framework(FCL)中存在的类型。如:在用"基元类型"int初始化一个整数时,int会直接映射到FCL中System.In
郑小超.
2018/01/26
8850
[C#2] 4-可空类型、静态类
1. 可空类型 值类型是不可以为null的[即不可为空值], 假如我们想让它为null呢[比如它对映这数据库中的某个表的某个字段,但是这个字段是null]。 自己实现的话,简单的写一个类,有一个值类型的字段,检查该字段是否初始化,是的话返回该值,否的话返回null。 假如是在C#1.0时,那么每个值类型都要写这么一份代码了。C#2.0有了泛型的支持,所以我们可以定义一个泛型版的。 幸运的是C#2.0带来了一个新的类型[System.Nullable<T>]帮我们实现了,T就是需要传入的类型[约束为值类型].
blackheart
2018/01/19
8260
Nullable Reference Types 可空引用类型
但如果想避免NullReferenceException的发生,确实需要做很多麻烦的工作。
solenovex
2019/10/15
8210
Nullable Reference Types 可空引用类型
C# 8.0 如何在项目中开启可空引用类型的支持
C# 8.0 引入了可为空引用类型和不可为空引用类型。由于这是语法级别的支持,所以比传统的契约式编程具有更强的约束力。更容易帮助我们消灭 null 异常。
walterlv
2023/10/22
3640
Java进阶(二十三)java中long类型转换为int类型
由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况:
全栈程序员站长
2022/08/23
1.7K0
Java进阶(二十三)java中long类型转换为int类型
java把string转int类型_java把String类型转换为int类型的方法
这篇文章将为大家详细讲解有关java把String类型转换为int类型的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
全栈程序员站长
2022/11/10
4.2K0
java把string转int类型_java把String类型转换为int类型的方法
点击加载更多

相似问题

泛型类型java中不接受基元int

30

为可空的基元类型定义泛型类型限制

14

将EF核心转换和非空类型转换为可空基元

12

如何在基元类型(Int)上修正这个等号

34

java.lang.IllegalArgumentException:无法接收Corda中的基元类型[int]

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文