如果long值小到可以存入int中,是否可以自动将其转换为int?
long i=1;
int j=i; //Error Type mismatch: cannot convert from long to int
如果long值小到可以存入int中,是否可以自动将其转换为int?
long i=1;
int j=i; //Error Type mismatch: cannot convert from long to int
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");
}
不可以,你必须进行显式转换。
i
的值可以是任何值。如果你想将1
赋给j
,那么你只需要赋值1
,但是如果你从一个变量中复制它,它必须允许任何long
值。 - Louis Wasserman这是一种需要显式转换的缩小转换。
int j= (int) i;
由于long类型可能太大而无法容纳,您需要进行显式转换,并且可能会丢失信息。您有责任确保long类型足够小以适应所需范围。
来自Java语言规范:
将有符号整数缩小为整数类型T的转换仅丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关数字值大小的信息外,这还可能导致生成的值的符号与输入值的符号不同。
在Java中是不允许的。是的,你肯定可以用另一种方式实现它。
你应该将它转换为整数:
long i = 1;
int j = (int) i;
i
的值是多少(好吧,在这种情况下可能可以,但通常不行),因此没有办法在不强制进行“适合”转换的同时“将其转换为小于某个值”。为此,您需要使用显式转换,并在需要检测溢出时预先检查该值。 - Hot Licks