为什么这个 Calendar 对象的 YEAR 设置为一个奇怪的值?
Why is this Calendar object's YEAR set to a strange value?
我正在编写一个关于日历的应用程序。现在我正在尝试熟悉 Calendar
class.
我写了一些代码来获取日期 1st Jan, Integer.MAX_VALUE
的 DAY_OF_WEEK
。我以为它会抛出异常或什么的。但它没有!它在星期四输出!这是代码:
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
设置为什么 real 值:
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)
相同的数字,但它没有!
输出:
Actual Year in Calendar object: 190728635
Maximum Year: 292278994
Maximum Integer: 2147483647
我超级困惑。为什么会有这样的结果?你能得到292278994之后的星期几吗?
这是 java 中整数溢出的一个例子。溢出不会在 java 中抛出异常。
查看本文:http://javapapers.com/core-java/java-overflow-and-underflow/
因为Integer.MAX_VALUE大于c.getMaximum(Calendar.YEAR)),你会溢出。
我正在编写一个关于日历的应用程序。现在我正在尝试熟悉 Calendar
class.
我写了一些代码来获取日期 1st Jan, Integer.MAX_VALUE
的 DAY_OF_WEEK
。我以为它会抛出异常或什么的。但它没有!它在星期四输出!这是代码:
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
设置为什么 real 值:
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)
相同的数字,但它没有!
输出:
Actual Year in Calendar object: 190728635
Maximum Year: 292278994
Maximum Integer: 2147483647
我超级困惑。为什么会有这样的结果?你能得到292278994之后的星期几吗?
这是 java 中整数溢出的一个例子。溢出不会在 java 中抛出异常。
查看本文:http://javapapers.com/core-java/java-overflow-and-underflow/
因为Integer.MAX_VALUE大于c.getMaximum(Calendar.YEAR)),你会溢出。