黑马程序员技术交流社区
标题:
高手在哪?求解答!
[打印本页]
作者:
肥猫
时间:
2013-7-1 00:44
标题:
高手在哪?求解答!
本帖最后由 肥猫 于 2013-7-3 21:55 编辑
RT
<P> </P>
<DIV class=blockcode>
<BLOCKQUOTE>public class Question {
public static void main(String[] args) {
long sum = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum); // 结果为2305842980222664795
Long sum2 = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum2 += i;
}
System.out.println(sum2); // 结果为2305843005992468481
}
}
复制代码
在EditPlus上运行是如上结果,IDE上则两个都是SUM2,求解为何?SUM数值如何来?
作者:
段旭东
时间:
2013-7-1 11:34
解答开始:
我复制了你的代码 经行了验证
发现:
public class d {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long sum = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(Integer.MAX_VALUE);
System.out.println(sum); // 结果为2305842980222664795
// Long sum2 = 0L;
// for (int i = 0; i < Integer.MAX_VALUE; i++) {
// sum2 += i;
// }
// System.out.println(sum2); // 结果为2305843005992468481
}
}
复制代码
我将sum2注释掉了 只让sum运行
得到的结果 为2305843005992468481
并没有获得LZ的自己计算的sum的值
所以我又输出了LZ的 判断条件
i < Integer.MAX_VALUE
输出的 nteger.MAX_VALUE值 为2147483647
如此长的位数 控制台输出都有点延迟
sum2的 初始值 以及判断条件 跟sum完全相同
所以 sum2的值也为2305843005992468481
总结:sum的值 不是消失了!因为 运行sum,和sum2时 控制台输出的了 两种结果
证明sum 和sum2同时运行了!
由于判断条件和初始值相同,所以可以认定为 输出结果为 2305843005992468481是正确
sum和 sum2的值都为2305843005992468481
作者:
神之梦
时间:
2013-7-3 21:49
楼主就是大神,试问解决了没???
我这重现不了问题
作者:
肥猫
时间:
2013-7-3 21:57
神之梦 发表于 2013-7-3 21:49
楼主就是大神,试问解决了没???
我这重现不了问题
靠啊,别这样,你这样说我会脸红,真的.
作者:
神之梦
时间:
2013-7-3 22:05
肥猫 发表于 2013-7-3 21:57
靠啊,别这样,你这样说我会脸红,真的.
脸红啥呀,真心崇拜啊。。。。。。
论坛里别人也在问相类似的问题,所以想问下猫大神,找到原因了没
作者:
孙四有
时间:
2013-7-7 00:52
int数据加法运算
作者:
于世德
时间:
2013-7-8 15:39
你们在说些什么,我怎么完全听不懂????
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2