”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在 Java 8 及更高版本中如何安全地将 Long 转换为 Int?

在 Java 8 及更高版本中如何安全地将 Long 转换为 Int?

发布于2024-11-15
浏览:656

How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

在 Java 中安全地将 Long 转换为 Int(针对 Java 8 更新)

在 Java 中,从 long 转换为 int 可能会导致在数据丢失中。为了解决这个问题,一种安全且惯用的方法是必不可少的。

Java 8 的 Math.toIntExact() 方法

在 Java 8 之前,推荐的安全强制转换方法long 到 int 是为了检查结果是否有潜在的信息丢失。这涉及将转换结果与原始 long 值进行比较:

public static int safeLongToInt(long l) {
    int i = (int) l;
    if ((long) i != l) {
        throw new IllegalArgumentException(l   " cannot be cast to int without changing its value.");
    }
    return i;
}

然而,在Java 8及以上版本中,已经引入了一个更为简洁有效的方法:Math.toIntExact()方法。此方法在发生溢出时会抛出ArithmeticException:

import static java.lang.Math.toIntExact;

long foo = 10L;
int bar = toIntExact(foo);

Java 8 中其他溢出安全方法

除了 toIntExact() 之外,Java 8 还引入了其他几种溢出安全方法以“精确”结尾。这些方法执行加法、减法、求反和减量等操作,同时检查潜在的溢出:

  • Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)

通过利用 Math.toIntExact () 和这些附加的溢出安全方法,您可以安全地将 long 值转换为 int 并执行算术运算,而不会丢失信息的风险。

最新教程 更多>
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-15
  • 显示未知数量的卡片时如何防止 Flex 项目重叠?
    显示未知数量的卡片时如何防止 Flex 项目重叠?
    重叠 Flex 项目问题水平显示一组未知数量的扑克牌,如果它们超过一定宽度,可能会导致它们重叠。 Flex 框可以用于此目的,但控制大小和重叠可能很棘手。解决方案该解决方案涉及设置特定的 CSS 属性以实现所需的效果。细分如下:Container:.cards 容器使用 flexbox (displ...
    编程 发布于2024-11-15
  • uint8_t 总是等于 unsigned char 吗?
    uint8_t 总是等于 unsigned char 吗?
    对 uint8_t 和 unsigned char 等价性的调查C 和 C 领域中 uint8_t 和 unsigned char 之间的相互作用提出了有关它们的问题可能出现的分歧。特别是,当 CHAR_BIT 超过 8 时,就会出现问题,导致 uint8_t 无法封装在 8 位内。定义 uint8...
    编程 发布于2024-11-15
  • 构建 Redis 克隆:深入研究内存数据存储
    构建 Redis 克隆:深入研究内存数据存储
    在数据存储解决方案领域,Redis 作为强大的内存键值存储脱颖而出。凭借其高性能和多功能性,它已成为许多开发人员的首选。在这篇博文中,我将引导您完成从头开始构建 Redis 克隆的过程,分享见解、挑战以及我在此过程中所做的设计选择。 项目概况 该项目的目标是复制 Redis 的基本功...
    编程 发布于2024-11-15
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-15
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-15
  • 如何在 Python 中使用 Lambda 函数
    如何在 Python 中使用 Lambda 函数
    Python 中的 Lambda 函数是动态创建小型匿名函数的强大方法。这些函数通常用于简短的操作,其中不需要完整函数定义的开销。 传统函数是使用 def 关键字定义的,而 Lambda 函数是使用 lambda 关键字定义的,并且直接集成到代码行中。特别是,它们经常用作内置函数的参数。它们使开发人...
    编程 发布于2024-11-15
  • Java 8 中 Stream.map() 和 Stream.flatMap() 之间的主要区别是什么?
    Java 8 中 Stream.map() 和 Stream.flatMap() 之间的主要区别是什么?
    Java 8 中的 Stream.map() 与 Stream.flatMap()Stream.map() 和 Stream.flatMap()是 Java 8 中两种常用的方法,它们对值流执行类似的转换。然而,它们在处理和返回值的方式上有根本的区别。Stream.map()接受一个 Functio...
    编程 发布于2024-11-15
  • 如何更改默认 Python 版本:为什么我的终端仍然使用 Python 2?
    如何更改默认 Python 版本:为什么我的终端仍然使用 Python 2?
    如何更改默认 Python 版本:超越兼容性问题您安装了 Python 3.2,尽管运行了 Update Shell Profile 命令,终端仍然存在显示Python 2.6.1。这种差异可能会令人困惑,所以让我们探讨一下如何更改默认的 Python 版本。历史背景:向后兼容性和多个版本过去,Py...
    编程 发布于2024-11-15
  • 负文本缩进是从无序列表中删除缩进的唯一方法吗?
    负文本缩进是从无序列表中删除缩进的唯一方法吗?
    从无序列表中删除缩进:负文本缩进是唯一的解决方案吗?问题出现了:如何消除无序列表中的所有缩进无序列表元素 (ul),尽管尝试将边距、填充和文本缩进设置为 0。虽然将文本缩进设置为负值似乎可以窍门,这是唯一的方法吗?答案在于将列表样式和左填充设置为空。通过执行以下代码,即可达到想要的效果:ul { ...
    编程 发布于2024-11-15
  • 使用 Pandas“apply”函数将函数应用于多列时如何修复错误?
    使用 Pandas“apply”函数将函数应用于多列时如何修复错误?
    多列的 Pandas“apply”函数故障排除尝试使用“apply”将函数应用于 Pandas 数据框中的多列时' 函数时,如果列名未包含在字符串中或函数定义中出现语法错误,用户可能会遇到错误消息。要解决未定义名称的问题,请确保指定列名在单引号或双引号内。例如,不要使用 'row[a...
    编程 发布于2024-11-15
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-15
  • 为什么应该避免在函数签名中使用“throw”?
    为什么应该避免在函数签名中使用“throw”?
    函数签名中“Throw”的危险虽然在函数签名中加入“throw”关键字可能很诱人明确声明潜在的例外情况,强烈建议不要这样做。尽管其目的看似简单,但有几个技术原因导致这种方法被认为是一个糟糕的选择。编译器限制编译器无法强制执行会产生一个重大问题函数签名中声明的异常规范。因此,编译器无法验证该函数是否确...
    编程 发布于2024-11-15
  • 如何在 MySQL 中将行转置为列:超越 GROUP_CONCAT 的限制?
    如何在 MySQL 中将行转置为列:超越 GROUP_CONCAT 的限制?
    在 MySQL 中将行转置为列:探索替代技术问题: 我们如何在 MySQL 查询中有效地将行转置为列?答案: MySQL 本质上并不提供一种直接的机制来转置整个结果集。但是,我们可以探索替代方法来实现所需的转换。尽管 GROUP_CONCAT 在将行转换为单列方面存在限制,但我们可以手动创建单独生成...
    编程 发布于2024-11-15
  • 为什么我的 Font Awesome 图标没有渲染?
    为什么我的 Font Awesome 图标没有渲染?
    Font Awesome 图标不渲染:原因和解决方案Font Awesome 图标是增强网页视觉吸引力的流行选择。然而,尽管包含了所需的 CSS 和 HTML,一些用户还是遇到了图标无法正确呈现的问题。本文探讨了此问题的潜在原因并提供了解决方案。一个常见问题是 CDN 链接不正确。确保Font Aw...
    编程 发布于2024-11-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3