在 Java 中长整型到整型的精确转换

主要观点:在 JDK 8 带来的诸多新特性中,Math.toIntExact()方法易被忽视但很有用。它能将 long 类型值转换为 int 类型,若值溢出 int 范围则抛出 ArithmeticException;而 Long.intValue()方法在整数溢出时不抛出异常,而是返回一个可能无用的整数值。

关键信息:

  • Javadoc 说明 Math.toIntExact(long)在值溢出 int 时抛出异常。
  • 若已知 Long 不会大于 int 能容纳的值,Math.toIntExact(Long)很有用。
  • Long.intValue()在整数溢出时不抛异常,软件可能继续错误使用溢出数字。
  • 代码示例展示了生成包含 Integer.MAX_VALUE 的 Long 范围,以及使用 Long.intValue()和 Math.toIntExact(Long)从 Long 获取 int 的两种方法,输出结果体现了两者在处理整数溢出时的差异。

重要细节:

  • 给出了相关 API 的文档链接,如 Math.toIntExact()、Long.intValue()等。
  • 展示了具体的代码生成 Long 范围的方法 generateLongInts()。
  • 给出了使用 Long.intValue()和 Math.toIntExact(Long)的两个方法 writeLongIntValue()和 writeIntExact()。
  • 输出结果详细展示了不同 Long 值在使用两种方法转换为 int 时的情况,包括正常和整数溢出的情况。
阅读 13
0 条评论