关于方法的调用和定义参数的问题

这是我写的一个日历代码

 public class VisualCalendar {
    public static void main(String[] args){
        String str = "2017-4-8";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date d = df.parse(str);
            Calendar c = new GregorianCalendar();
            c.setTime(d);
            c.set(Calendar.DATE, 1);//将日期设为当月一号
            c.get(Calendar.DAY_OF_WEEK);//这一天是一周中的第几天,这个方法的第一次调用
            int maxDay=c.getActualMaximum(Calendar.DATE);//确定当月最大天数

            System.out.println("日\t一\t二\t三\t四\t五\t六");
            for(int i=1;i<c.get(Calendar.DAY_OF_WEEK);i++){
                System.out.print("\t");
            }
            for(int i=1;i<=maxDay;i++){
            System.out.print(i+"\t");
            int w=c.get(Calendar.DAY_OF_WEEK);//这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
            if(w==Calendar.SATURDAY){
                System.out.println();
            }
            c.add(Calendar.DATE, 1);
        }

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }





    }
}

然后我发现了个问题,就是 int w=c.get(Calendar.DAY_OF_WEEK)这段代码;如果不用w保存这个方法的调用,在下文中直接用if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY)结果就不对,但是如果提前在第一次调用这个方法时就用w将这个方法调用的结果保存的话,结果又变得很奇怪
这到底是什么情况啊,真的理解不能。。。。
第二段:

```public class VisualCalendar {
public static void main(String[] args){
String str = "2017-4-8";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(d);
c.set(Calendar.DATE, 1);//将日期设为当月一号
int w=c.get(Calendar.DAY_OF_WEEK);//这一天是一周中的第几天
int maxDay=c.getActualMaximum(Calendar.DATE);//确定当月最大天数

        System.out.println("日\t一\t二\t三\t四\t五\t六");
        for(int i=1;i<w;i++){
            System.out.print("\t");
        }
        for(int i=1;i<=maxDay;i++){
        System.out.print(i+"\t");
        //这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
        if(w==Calendar.SATURDAY){
            System.out.println();
        }
        c.add(Calendar.DATE, 1);
    }

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }





}

}


没有毛病啊,int基本类型可以这样对比啊图片说明

package test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

/**

  • @author 熊浪
  • @创建时间2016年9月26日
  • @Email xiongl@sunline
  • @此类的作用
    */
    public class Test {

    public static void main(String[] args) {
    String str = "2017-4-8";
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    try {
    Date d = df.parse(str);
    Calendar c = new GregorianCalendar();
    c.setTime(d);//获取当天的时间
    c.set(Calendar.DATE, 1);// 将日期初始化为当月的一号
    int maxDay = c.getActualMaximum(Calendar.DATE);// 确定当月最大天数
    System.out.println("日\t一\t二\t三\t四\t五\t六");
    for (int i = 1; i < c.get(Calendar.DAY_OF_WEEK); i++) {
    System.out.print("\t");
    }
    //这里开始c的时间为2017年4月1日。
    for (int i = 1; i <= maxDay; i++) {
    System.out.print(i + "\t");
    // 这里调用一个方法得到的值好像必须要用一个变量保存,不然不对
    //4月1日的DAY_OF_WEEK位置在7号位置,打印换行符
    if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
    System.out.println();
    }
    c.add(Calendar.DATE, 1);//关键代码当前时间增加一天。即此时c的时间变成了4月2日。
    //之后在已经换行的第一个位置打印2,
    //并且4月2日的DAY_OF_WEEK位置在1号位置,并不等于7号位,所以不用换行
    //放在外面已经确定的w=7,那当然是一值换行了。
    }

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    }

}