我正在撰写一个关于日历的应用。现在我正在努力熟悉Calendar
类。
我写了一些代码来获取日期DAY_OF_WEEK
的{{1}}。我以为它会抛出异常或其他东西。但事实并非如此!它输出星期四!这是代码:
1st Jan, Integer.MAX_VALUE
注意:方法Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, Integer.MAX_VALUE);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
System.out.println (getReadableDayOfWeek(c.get(Calendar.DAY_OF_WEEK)));
只是按照它说的那样做。
然后,当我查看文档时,我发现有一个名为getReadableDayOfWeek
的方法。所以真的 是最大的!所以我添加了一些getMaximum
来查看实际最大值是什么:
println
输出结果为:
System.out.println ("Maximum Year: " + c.getMaximum(Calendar.YEAR));
System.out.println ("Maximum Integer: " + Integer.MAX_VALUE);
现在我知道最大值小于Maximum Year: 292278994
Maximum Integer: 2147483647
。我想知道真正的值是什么,我将Integer.MAX_VALUE
设置为:
YEAR
我猜它会输出与System.out.println ("Actual Year in Calendar object: " + c.get (Calendar.YEAR));
System.out.println ("Maximum Year: " + c.getMaximum(Calendar.YEAR));
System.out.println ("Maximum Integer: " + Integer.MAX_VALUE);
相同的数字,但它没有!
输出:
c.getMaximum(Calendar.YEAR)
我非常困惑。为什么会有这个结果?你可以在292278994之后获得一周中的哪一天吗?
答案 0 :(得分:0)
这是java中整数溢出情况的一个例子。溢出不会在java中引发异常。
见本文:http://javapapers.com/core-java/java-overflow-and-underflow/
因为Integer.MAX_VALUE大于c.getMaximum(Calendar.YEAR)),所以会溢出。