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

用Java安全地将long转换为int

田兴朝
2023-03-14
问题内容

Java中最惯用的方法是验证从转换long为int不会丢失任何信息?

这是我当前的实现:

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已添加了一个新方法来完成此任务。

import static java.lang.Math.toIntExact;

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

会抛出一个ArithmeticException溢出的情况。

看到: Math.toIntExact(long)

Java 8中已添加了其他几种溢出安全方法,它们的结尾是精确。

例子:

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


 类似资料:
  • 问题内容: 我有一个CSV导入到我们的数据库。“列”之一包含 应 为INT的数据,但某些行的数字仅落在BIGINT范围内(因为它们是来自我们合作伙伴之一的测试数据)。我们在内部存储INT,不希望更改。 我想从BIGINT安全地转换为INT。安全地说,如果发生算术溢出,则不会出现任何错误。如果转换成功,我希望我的脚本继续进行。如果失败,我希望它短路。我似乎无法弄清楚正确的语法。这就是我得到的: 我曾

  • 问题内容: 如何在Java中将值转换为值? 问题答案: 或如果您不必担心null: 在这两种情况下,您都可能会遇到溢出问题(因为Long可以比Integer存储更大的范围)。 Java 8有一个辅助方法来检查溢出(在这种情况下,您会得到一个异常):

  • 所以,问题是--为什么在I=L的情况下,当L的大小足够小到适合I时,必须显式地进行,但在F=L的情况下,当L的大小也适合F时,铸造可以隐式地进行,而不会产生错误。 我的意思是,在这两种情况下,右操作数的大小可能不适合左操作数。那么,为什么在一种情况下(I=L),强制转换必须显式进行,而在另一种情况下(F=L)可以隐式进行呢?虽然隐式地将长var转换为int var比隐式地将长var转换为浮点var

  • 我正在解决一个问题,其中的任务是在用户提到的给定行输出pascal三角形的结果。 https://leetcode.com/problems/pascals-triangle-ii/ 我写了我的解决方案,其中有存储巨大阶乘结果的问题。 通过这些问题, 整数类型可以在C中存储哪些范围的值 长到无符号的字节数是多少? 并通过其他一些来源,我进行了以下更改,这给了我所需的结果。 由于“C”是int类型,

  • 问题内容: 这可能是一个简单的,总机问题,但我的第一次尝试令人惊讶地完全失败了。我想获取一组原始的long并将其转换成一个列表,我试图这样做: 什么是正确的方法? 问题答案: 我发现使用apache commons lang ArrayUtils(JavaDoc,Maven依赖项)很方便 它还具有反向API 编辑:更新以提供完整的转换为列表,如注释和其他修复建议。

  • 问题内容: 我需要使用反射获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: 并使用如下方法: 要么 问题是我似乎无法转换为: 有没有更好的方法来实现这一目标? 我正在使用Java 1.6。 问题答案: 不,即使可以从转换为,也无法转换为。对于已知为数字的 单个 值,并且想要获得长整型值,可以使用: 对于数组,这将比较棘手…