C#转Java,long转int的数据溢出但程序不报错问题 谢谢

zyciis129 2012-07-14 07:32:21

public class HelloWorld{
public static void main(String[] args)
{
int i1= (int)10000000000000L;
System.out.println(i1);
}
}

这个是Java的今天看的
为什么这个不会出错呢?
结果为:1316134912
不合理啊
在.NET肯定会错说转换溢出

那如果在程序中出现这样
上面的数据进行转换
正确的做法是怎么样呢?
按我想的这个时候程序应该是报错,而不是给i1赋值1316134912
谢谢
...全文
610 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
为啥呢 2012-07-16
  • 打赏
  • 举报
回复
不事先判断就事后判断
赋值后判断i1是否等于传入值,如果不等则抛出异常
龙四 2012-07-15
  • 打赏
  • 举报
回复
我记得c/c++也是不会报错的,C#不清楚,java跟c/c++一样
qq563292236 2012-07-15
  • 打赏
  • 举报
回复
会把前面的32位全部截取掉,至于得到是什么数,无法预知
brightyq 2012-07-15
  • 打赏
  • 举报
回复
你要坚持说没有办法事先判断,那就转之前校验是否超出范围吧。
记得大值,最小值都校验。
value > Integer.MAX_VALUE || value < Integer.MIN_VALUE
zyciis129 2012-07-15
  • 打赏
  • 举报
回复
设计的时候考虑好,考虑是否有这种情况,有的话就避免这种强转。我的话,很少去判断,因为写代码之前会考虑数据的取值范围,避免出现这种情况
---------------------------------
这种情况没办法判断的,万一出现这种情况你不会怎么处理?
像我上面写的一个转换,而不是用Java自身的强制转换?
brightyq 2012-07-14
  • 打赏
  • 举报
回复
设计的时候考虑好,考虑是否有这种情况,有的话就避免这种强转。我的话,很少去判断,因为写代码之前会考虑数据的取值范围,避免出现这种情况
zyciis129 2012-07-14
  • 打赏
  • 举报
回复
RE:4楼
那也就是你们会对这种转换的话会写一个方法如
public class Convert{
public static int toInt(long l)
{
if(value > Integer.MAX_VALUE){
throw new Exception("超出int范围");
}else{
return((int)l);
}
}
}
这样子吗?
因为我是一直用C#,刚开始要转Java
所以想问清楚大家是怎么处理的
谢谢
brightyq 2012-07-14
  • 打赏
  • 举报
回复
知道会损失精度,就不要强制转换。
如果非要转,可以事先判断,如果超出范围抛个异常

long l =10000000000000L;
if(l > Integer.MAX_VALUE){
throw new Exception("超出int范围");
}else{
System.out.println((int)l);
}
zyciis129 2012-07-14
  • 打赏
  • 举报
回复
int型是32位的。而1000000000000转换成二进制后显然超过32了位,所以强制换转成int时,会从最后一位向前截取32位,截取到什么,就是什么。
----------------------------------
我也知道是这样,所以说大家怎么处理
因为我是刚从.NET转过来JAVA的
在.NET他会报错,这样我感觉很合理
但Java他不报错,而是给了一个错误的结果,这后果是很严重的啊

大家是怎么处理这种转换的

谢谢
brightyq 2012-07-14
  • 打赏
  • 举报
回复
这个强制类型转换是可以转的,编译器不报错,只是转换后的结果会损失精度。
int型是32位的。而1000000000000转换成二进制后显然超过32了位,所以强制换转成int时,会从最后一位向前截取32位,截取到什么,就是什么。
所以从级别高的类型向级别低的类型转换时,结果可能是不可预知的,但毕竟还是可以强制类型转的。
风一样的踏雪 2012-07-14
  • 打赏
  • 举报
回复
java语法不知道,楼主可以转化时用tryparse来试试,http://www.cnblogs.com/legend_sun/archive/2008/12/23/1360533.html,要是问java的话还是到Java区比较好

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧