我正在研究java编程,我对常量有点困惑.从我到目前为止所读到的常量是最终的,不能像变量一样重新分配新的值.但是,当我使用Calender类时,set方法似乎改变了一个常量字段.例如:
Calendar cal = Calendar.getInstance();
System.out.println("The year is " + cal.get(Calendar.YEAR));
cal.set(Calendar.YEAR, 2001);
System.out.println("The year is " + cal.get(Calendar.YEAR));Run Code Online (Sandbox Code Playgroud)
如果在类中Calendar.YEAR声明final了该字段,Calendar那么为什么我可以使用set方法将其更改为其他值?
Calendar.YEAR只是一个常数说明你要在日历中设置哪个逻辑字段.
目的是避免使用API
setYear
setDay
setMonth
...
Run Code Online (Sandbox Code Playgroud)
现在回想起来,我会说这是一个引人注目的坏主意-与大多数设计的其余部分一起java.util.Calendar和java.util.Date.
所以这个电话:
cal.set(Calendar.YEAR, 2001)
Run Code Online (Sandbox Code Playgroud)
不会更改...的值,Calendar.YEAR它会更改Calendar对象中的其他(私有)字段.