如果 long 值足够小可以转换为 int,则将 long 转换为 int。

3

如果long值小到可以存入int中,是否可以自动将其转换为int?

long i=1;
int j=i; //Error Type mismatch: cannot convert from long to int

不,编译器并不“知道”那个。 - SLaks
正如SLaks所说,编译器无法在执行时知道i的值是多少(好吧,在这种情况下可能可以,但通常不行),因此没有办法在不强制进行“适合”转换的同时“将其转换为小于某个值”。为此,您需要使用显式转换,并在需要检测溢出时预先检查该值。 - Hot Licks
整数字面值如果以字母 L 或 l 结尾,则其类型为 long;否则其类型为 int。建议使用大写字母 L,因为小写字母 l 很难与数字 1 区分开来。——摘自 Java 参考资料 - hamid
5个回答

5
long i;
if (i =< Integer.MAX_VALUE && i >= Integer.MIN_VALUE) {
  int j = (int) i; // No loss of precision
} else {
    throw new Exception("Cannot convert "+i+" to int");
}

3

不可以,你必须进行显式转换。


好的,谢谢。但我知道这个。但为什么需要这样做呢?你能详细说明一下吗?因为如果值在范围内,为什么不允许不进行强制转换呢?如果我们进行强制转换,可能会丢失一些信息。 - NFE
1
因为变量i的值可以是任何值。如果你想将1赋给j,那么你只需要赋值1,但是如果你从一个变量中复制它,它必须允许任何long值。 - Louis Wasserman

2

这是一种需要显式转换的缩小转换。

int j= (int) i;

由于long类型可能太大而无法容纳,您需要进行显式转换,并且可能会丢失信息。您有责任确保long类型足够小以适应所需范围。

来自Java语言规范:

将有符号整数缩小为整数类型T的转换仅丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关数字值大小的信息外,这还可能导致生成的值的符号与输入值的符号不同。


1

在Java中是不允许的。是的,你肯定可以用另一种方式实现它。


0

你应该将它转换为整数:

long i = 1;
int j = (int) i;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接