返回信息流1 : System.out.println(2.0-1.1); 请问这条语句有问题吗,输出结果是什么?
2 : 有什么问题,输出结果是什么?
public class Test {
public static void main(String args[])
{
final long M = 24*60*60*1000*1000;
final long S = 24*60*60*1000;
System.out.println("M is : " + M);
System.out.println("S is : " + S);
System.out.println(M/S);
}
}
回来一验证,跟我答的差别好大。。。
这是一条镜像帖。来源:北邮人论坛 / java / #16122同步于 2010/10/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
完美时空俩个笔试题
panky
2010/10/23镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
囧 居然考这种。。。
网上有本电子书 叫做《java解惑》 专门讲这种东西
依稀记得这两道题都是这本书上出现过的
【 在 panky 的大作中提到: 】
: 1 : System.out.println(2.0-1.1); 请问这条语句有问题吗,输出结果是什么?
: 2 : 有什么问题,输出结果是什么?
: public class Test {
: ...................
java解惑那书不错。。。很适合对付各种笔试
【 在 hotcode (木易) 的大作中提到: 】
: 囧 居然考这种。。。
: 网上有本电子书 叫做《java解惑》 专门讲这种东西
: 依稀记得这两道题都是这本书上出现过的
: ...................
能解释一下500654080那个答案么?
【 在 buptaa 的大作中提到: 】
: test result by code:
: 0.8999999999999999
: M is : 500654080
: ...................
【 在 gsj4ever 的大作中提到: 】
: 能解释一下500654080那个答案么?
: 【 在 buptaa 的大作中提到: 】
: : test result by code:
: ...................
因为数字类型即使在long定义的对象的等号后面,没写L也会被天然呆的JAVA虚拟机解释成默认类型int
而int的范围是-2147483648...2147483647(-2^31~2^31-1)
超过部分取余截断
于是(((24 * 60 * 60 * 1 000 * 1 000) / (2^31)) - 40) * (2^31) = 500 654 080
如果是
final long M = 24*60*60*1000*1000L;
System.out.println("M is : " + M);
那么输出86400000000妥妥的,因为long表示正整数最大是9223372036854775807
嗯,谢谢,原因我知道,计算过程看了解释也懂了
不过觉得有点蛋疼……
【 在 patpat1987 的大作中提到: 】
: : 能解释一下500654080那个答案么?
: : 【 在 buptaa 的大作中提到: 】
: : : test result by code:
: ...................