为什么此修饰符方法不会按预期更改给定对象?

时间:2015-10-22 07:49:31

标签: java object methods

我试图写一个Time对象,它有一个增量方法,为它添加任意秒,所以这里是代码:

class Time {
int hour, minute;
double second;

public Time(int hour, int minute, double second) {
    this.hour = hour;
    this.minute = minute;
    this.second = second;
}

public Time(double seconds) {
    this.hour = (int) (seconds/3600);
    seconds -= this.hour*3600;
    if (this.hour >= 24) this.hour -= 24;
    this.minute = (int) (seconds/60);
    seconds -= this.minute*60;
    this.second = seconds;
}

public static double convertToSeconds(Time t) {
    double seconds = t.hour*3600 + t.minute*60 + t.second;
    return seconds;
}

public static void increment(Time t, double s) {
    double seconds = convertToSeconds(t) + s;
    t = new Time(seconds);
    printTime(t);
}

public static void printTime(Time t) {
    System.out.println(t.hour + ":" + t.minute + ":" + t.second);
}

public static void main(String[] args) {
    Time t = new Time(11, 8, 3.0);
    printTime(t);
    increment(t, 60);
    printTime(t);
}
}

它给出了这个输出:

11:8:3.0
11:9:3.0
11:8:3.0

它显示对象已在增量方法内按预期更改,但在调用增量方法后返回main,对象保持不变。问题是什么?

2 个答案:

答案 0 :(得分:0)

您无法通过方法参数更改变量的引用内容,即t = new Time(seconds);不会更改main方法指向t的地址。如果您想要持续更改,则必须在t中返回increment并将main更改为

t = increment(t, 60);
printTime(t);

答案 1 :(得分:0)

您设置t指向方法内的新对象。这只会改变方法中t的refrernce,并且不会影响外部范围。

要修复,要么更改方法以返回nee对象(并在主体中指定它),要么更改实现以更改现有对象中的时间而不是创建新对象。