gpt4 book ai didi

java - 长期分配

转载 作者:太空狗 更新时间:2023-10-29 22:49:42 28 4
gpt4 key购买 nike

我一直在尝试这种 int 和 long 转换,我尝试将 int 变量分配给 long 变量。代码如下:

public static void main(String []args){
int i = 1024;
long j = i;
long k = i*i*i*i;
System.out.println("j= " +j+ ", k= " +k);
}

因此,在打印 j 时,它只是给出了 1024 的输出。但是在打印 k 时,它显示溢出(k=0)。我通过使用这种技术解决了这个问题,我已经明确地将每个 i 转换为 long。即

public static void main(String []args){
int i = 1024;
long j = i;
long k = ((long)i)*((long)i)*((long)i)*((long)i);
System.out.println("j= " +j+ ", k= " +k);
}

现在,它显示了 jk 的正确值。所以,我想知道为什么在第二种情况下需要转换 int 而在第一种情况下不需要。 k,作为一个long可以在这个重赋值后保留这个值。但是,为什么它没有被正确分配?

最佳答案

原因是你的行

long k = i*i*i*i;

可以认为是

long k = ((i*i)*i)*i;

或者...

int k1 = i*i;
int k2 = k1*i;
int k3 = k2*i;
long k = k3;

所以当任何 kn溢出,你会得到错误。

当您进行转换时,您显然通过始终乘以 long 来规避这个问题。我们在一起。

当然,对初始程序最简单的修改是定义 i作为 long马上,而不是 int .

long i = 1024L;

关于java - 长期分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com