Calendar rightNow = Calendar.getInstance();
rightNow.set(Calendar.YEAR, 1111);
System.out.println(rightNow.get(Calendar.YEAR));

Calendar rightNow1 = Calendar.getInstance();
System.out.println(rightNow1.get(Calendar.YEAR));打印结果:1111
          2011YEAR 是 Calendar 的静态字段,为什么设置过YEAR为1111  再次new一个Calendar 实例时,打印的却是2011希望高手能解答下虽然没什么分

解决方案 »

  1.   

    public final static int YEAR ;你怎么改Calendar rightNow = Calendar.getInstance();
    rightNow.set(Calendar.YEAR, 1111);public void set(int field, int value)修改的是这个rightNow对象的值
      

  2.   

    2Lpublic void set(int field,
                    int value)将给定的日历字段设置为给定值。
    参数:
    field - 给定的日历字段。
    value - 给定日历字段所要设置的值。 
    那这个方法设置的是什么值?既然不是设置YEAR 的值。那是设置rightNow对象中的那个值?
    不太懂
      

  3.   

    Calendar rightNow = Calendar.getInstance();
    rightNow.set(Calendar.YEAR, 1111);
    System.out.println(rightNow.get(Calendar.YEAR));Calendar rightNow1 = Calendar.getInstance();
    System.out.println(rightNow1.get(Calendar.YEAR));第一次打印的是rightNow 对象的年,而这个对象你将年和设置为1111了;
    第二次打印的是rightNow1 这个对象,你没有设置这个年,默认是当前年;所以你打印的时候,显示的是2011;这两个对象是不同的
      

  4.   

    3L  
    既然设置了年,能告诉我是设置了Calendar 的哪一个属性吗?
      

  5.   

    Calendar.YEAR确实是static的(而且是final的,因此你不可能设置它的值),但它只是一把钥匙,通过这把钥匙,你能从每个日历对应的位置取出当前日历相关的信息。你对他说“告诉我(get)年份(YEAR)”,不同的日历就会告诉你这个日历对应的年份。你设置/取到的是每个不同日历里面的年份的值,而不是“年份”这个词
      

  6.   

    很繁琐,够写1个晚上的。没必要那么看。这个类,会用即可。see GregorianCalendar
      

  7.   

    看看jdk源代码 
    Calendar类的源代码
     public static final int YEAR = 1;public static Calendar getInstance()
      {
        Calendar localCalendar = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
        localCalendar.sharedZone = true;
        return localCalendar;
      }再看看 createCalendar方法源代码 private static Calendar createCalendar(TimeZone paramTimeZone, Locale paramLocale)
      {
        if (("th".equals(paramLocale.getLanguage())) && ("TH".equals(paramLocale.getCountry())))
          return new BuddhistCalendar(paramTimeZone, paramLocale);
        if (("JP".equals(paramLocale.getVariant())) && ("JP".equals(paramLocale.getCountry())) && ("ja".equals(paramLocale.getLanguage())))
          return new JapaneseImperialCalendar(paramTimeZone, paramLocale);
        return new GregorianCalendar(paramTimeZone, paramLocale);
      }
    有没有发现
    每调用一次Calendar.getInstance() 就会产生一个新的对象,
    Calendar rightNow = Calendar.getInstance();//rightNow  对象1
    rightNow.set(Calendar.YEAR, 1111);
    System.out.println(rightNow.get(Calendar.YEAR));Calendar rightNow1 = Calendar.getInstance();//rightNow1  对象2
    System.out.println(rightNow1.get(Calendar.YEAR));对象1 和 对象2 是两个不同的对象,你设置的是对象1 的年份,对象2并没有改变,所以输出的结果是对的