我一直在尝试这个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);
}
Run Code Online (Sandbox Code Playgroud)
因此,在打印时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);
}
Run Code Online (Sandbox Code Playgroud)
现在,这既表现出的正确的价值观j和k.所以,我想知道为什么需要int在第二种情况下进行投射,而不是在第一种情况下投射.在这个繁重的任务之后k,作为一个long可以保留这个值.但是,为什么没有正确分配?
如果您将以下代码放在.NET 4.5应用程序中:
public const long MAXIMUM_RANGE_MAGNITUDE = int.MaxValue + 1;
Run Code Online (Sandbox Code Playgroud)
生成编译器错误,指出"操作在编译模式下在编译时溢出".我知道我可以把它放在一个"未经检查"的块中并且没问题,但我的问题是为什么错误出现在第一位?很明显,long可以保持int的最大值加1.
请注意,使用Int32和Int64而不是long和int似乎没有帮助.