如何正确获取变量的先前值?

时间:2012-08-04 09:11:43

标签: java calendar

我想获得变量的先前值(gmtHourPrev),所以我这样做。在用于测试目的的更改时间之后,我看到gmtHourPrev的值总是等于gmtHour并且无法获得它的先前值。我在这做错了什么?感谢

private int gmtHour;
private int gmtHourPrev;

public int getHour() {
    return gmtHour;
}    
public void setGmtHour(int gHour) {
    this.gmtHourPrev = this.gmtHour;
    this.gmtHour = gHour;
}    
public int getGmtHourPrev() {
    return gmtHourPrev;
}

public String getGmtHourInfo() {
    gmtHour = Calendar.HOUR;
    setGmtHour(gmtHour);
    if (isOK() == true) {
       return gmtHour;
    }
    else {
       return getGmtHourPrev();
    }
}

4 个答案:

答案 0 :(得分:1)

看看这个:

gmtHour = Calendar.HOUR;
setGmtHour(gmtHour);

除了Calendar.HOUR 可能不是你认为的那个(这是一个常数)之外,你有效地设置变量两次。上面的代码相当于:

gmtHour = Calendar.HOUR;
gmtHourPrev = gmtHour;
gmtHour = gmtHour;

这相当于:

gmtHour = Calendar.HOUR;
gmtHourPrev = Calendar.HOUR;

您只需设置一次,例如只是致电

setGmtHour(Calendar.HOUR);

但是,这个价值几乎肯定不是你想要的......

你可能想要:

setGmtHour(calendar.get(Calendar.HOUR));

对于Calendar的某些实例。

哦,尝试从声明为返回int的方法返回String也不是一个好主意......

答案 1 :(得分:0)

Calendar.HOUR是一个静态final int(常量),它简单地引用Calendar对象中的一个字段。在Calendar实例上调用它时,它的用法是传递给get()方法,以检索Calendar表示的小时值。

除此之外,这两行:

gmtHour = Calendar.HOUR;
setGmtHour(gmtHour);

基本上意味着gmtHourgmtHourPrev始终相等,因为您将gmtHour设置为等于该值,然后调用setGmtHour()gmtHourPrev设置为gmtHour的值,然后将gmtHour设置为传递的值(gmtHour的当前值)。

答案 2 :(得分:0)

工作正常;我添加了一些测试代码;亲眼看看:

public class Main {
    private int gmtHour;
    private int gmtHourPrev
    public int getHour() {
        return gmtHour;
    }    
    public void setGmtHour(int gHour) {
        this.gmtHourPrev = this.gmtHour;
        this.gmtHour = gHour;
    }    
    public int getGmtHourPrev() {
        return gmtHourPrev;
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.setGmtHour(5);
        System.out.println("hour set to 5");
        System.out.println("getGmtHourPrev(): " + main.getGmtHourPrev());
        System.out.println("getHour(): " + main.getHour());
        main.setGmtHour(6);
        System.out.println("hour set to 6");
        System.out.println("getGmtHourPrev(): " + main.getGmtHourPrev());
        System.out.println("getHour(): " + main.getHour());
    }
}

答案 3 :(得分:0)

您正在使用一个值分配给gmtHour,因此您总是会得到一个值。

public String getGmtHourInfo() {
    gmtHour = Calendar.HOUR;
    setGmtHour(gmtHour);
    ....
}

如果您使用它,您的代码将起作用:

    setGmtHour(Calender.HOUR+1);
    setGmtHour(Calendre.HOUR);
    ....

然后打印您会看到差异的值。