final long a=10*60*60*1000*100;
final long b=10*60*60*1000*1000; System.out.println(a); // 结果:-694967296
System.out.println(b); //结果:1640261632 有没有人知道为什么会出现这样的结果?
解决方案 »
- smslib 读不到端口问题
- 小弟编了个学生信息管理系统 可是里边还有数据库的内容,应该如和打包发行,在不同的机器上都能运行
- 当我关闭程序时,怎样释放和关闭线程呢?
- 一个类的实验,我运行到了.但老师说没按照他的要求(要什么构造方法.不懂)帮忙看看啊,谢!
- 如何用java写客户端通过corba调dehpi写的corba的服务端??--高分求助
- 有关基础Java集合某些方面的疑问,有请各位大侠,高手们,一起帮小弟解释解释!谢谢啦!
- 求助:jframe如何显示为设计模式?
- 关于jbuilder中的图标问题
- 为什么会这样呢?
- 急救,怎样在linux下限制磁盘空间的使用?
- 如何用JAVA程序做到访问带有用户名密码验证的局域网资源
- 关于关闭网页弹出提示框的问题。
long取值范围是-2147483647 到2147483647
好像超出这个范围了
个人看法..
long 的好像是 2,147,483,647
正好...溢出.
java的数字...在内部用2进制表示时,左数第一位是符号位,因为java没有无符号类型.
所以第一位是0就是正,是1表示负.那么当数字大小刚好溢出时,他一定变成负的...
但是大很多时...就溢出了好多次了...就有可能变回来了.
就算有Integer的取值范围也大于这个结果,我觉得不是你们说的那样. 还有另外的答案吗?
正确的写法应为:final long a = 10L * 60 * 60 * 1000 * 100;
final long b = 10L * 60 * 60 * 1000 * 1000;
当计算结果超出它所能表示的范围时,保留低 32 位的值,就把超过 32 位
的数据给扔掉,这时称为溢出。