public class HelloWorld{
public static void main(String[] args)
{
int i1= (int)10000000000000L;
System.out.println(i1);
}
}这个是Java的今天看的
为什么这个不会出错呢?
结果为:1316134912
不合理啊
在.NET肯定会错说转换溢出那如果在程序中出现这样
上面的数据进行转换
正确的做法是怎么样呢?
按我想的这个时候程序应该是报错,而不是给i1赋值1316134912
谢谢
int型是32位的。而1000000000000转换成二进制后显然超过32了位,所以强制换转成int时,会从最后一位向前截取32位,截取到什么,就是什么。
所以从级别高的类型向级别低的类型转换时,结果可能是不可预知的,但毕竟还是可以强制类型转的。
----------------------------------
我也知道是这样,所以说大家怎么处理
因为我是刚从.NET转过来JAVA的
在.NET他会报错,这样我感觉很合理
但Java他不报错,而是给了一个错误的结果,这后果是很严重的啊大家是怎么处理这种转换的谢谢
如果非要转,可以事先判断,如果超出范围抛个异常long l =10000000000000L;
if(l > Integer.MAX_VALUE){
throw new Exception("超出int范围");
}else{
System.out.println((int)l);
}
那也就是你们会对这种转换的话会写一个方法如
public class Convert{
public static int toInt(long l)
{
if(value > Integer.MAX_VALUE){
throw new Exception("超出int范围");
}else{
return((int)l);
}
}
}
这样子吗?
因为我是一直用C#,刚开始要转Java
所以想问清楚大家是怎么处理的
谢谢
---------------------------------
这种情况没办法判断的,万一出现这种情况你不会怎么处理?
像我上面写的一个转换,而不是用Java自身的强制转换?
记得大值,最小值都校验。
value > Integer.MAX_VALUE || value < Integer.MIN_VALUE