java中的引用变量未更改其状态

java中的引用变量未更改其状态,java,Java,我有以下代码: class Cat { String name; float time; void action(){ if (time >= 0 && time < 8) { System.out.println("I am sleeping"); } else if (time >= 8 && time < 12) { System

我有以下代码:

class Cat {
    String name;
    float time;

    void action(){
        if (time >= 0 && time < 8) {
            System.out.println("I am sleeping");
        } else if (time >= 8 && time < 12) {
            System.out.println("I am playing");
        } else if (time >= 12 && time < 19) {
            System.out.println("I am sleeping");
        } else if (time >= 19 && time <= 24) {
            System.out.println("I am playing");
        } else {
            System.out.println("Wrong input");
        }
    }
}

public class Main {

    public static void main(String[] args) {
        Cat cat1 = new Cat();
        Cat cat2 = new Cat();

        cat1.name = "kali";
        cat2.name = "lali";

        Cat time1 = new Cat();
        Cat time2 = new Cat();
        Cat time3 = new Cat();
        Cat time4 = new Cat();

        time1.time = 3;
        cat1.action();

        time2.time = 9;
        cat1.action();

        time3.time = 15;
        cat2.action();

        time4.time = 21;
        cat2.action();
    }
}
但是,我得到以下输出:

I am sleeping
I am playing
I am sleeping
I am playing
I am sleeping
I am sleeping
I am sleeping
I am sleeping
为什么会这样


据我所知,变量的状态
time
在这里是常量,不会随着新的输入而改变。

您必须这样做:

Cat cat1 = new Cat();
Cat cat2 = new Cat();

cat1.name = "kali";
cat2.name = "lali";

cat1.time = 9;
cat1.action();

cat1.time = 15;
cat1.action();

cat2.time = 9;
cat2.action();

cat2.time = 15;
cat2.action();

因为您有6个不同的对象,并且您正在更改时间对象
time1、time2、time3、time4
。cat1对象未连接到
time1、time2、time3、time4

,这是因为您在不同实例上执行操作(例如cat1而不是time1)。因为这些都是实例变量,所以它们只在该实例上起作用

以下内容将解决您的问题:

time1.time = 3;
time1.action(); // instead of cat1

time2.time = 9;
time2.action(); // instead of cat2

// ...

期望的输出是可能的

分别调用实例变量
time1、time2、time3、time4的action方法,而不是
cat1

通过使<代码>浮动时间作为<代码>静态浮动时间的静态/类变量。这样,
time
的值将由
Cat的所有实例共享

以下是第二个选项的更新代码

class Cat {
    String name;
    static float time;

    void action() {
        if (time >= 0 && time < 8) {
            System.out.println("I am sleeping");
        } else if (time >= 8 && time < 12) {
            System.out.println("I am playing");
        } else if (time >= 12 && time < 19) {
            System.out.println("I am sleeping");
        } else if (time >= 19 && time <= 24) {
           System.out.println("I am playing");
        } else {
           System.out.println("Wrong input");
        }
    }
}

public class Main {

public static void main(final String[] args) {
    final Cat cat1 = new Cat();
    final Cat cat2 = new Cat();

    cat1.name = "kali";
    cat2.name = "lali";

    Cat.time = 3;
    cat1.action();

    Cat.time = 9;
    cat1.action();

    Cat.time = 15;
    cat2.action();

    Cat.time = 21;
    cat2.action();
   }
}
类Cat{
字符串名;
静态浮动时间;
无效行动(){
如果(时间>=0&&time<8){
System.out.println(“我在睡觉”);
}否则如果(时间>=8&&time<12){
System.out.println(“我正在玩”);
}否则如果(时间>=12&&time<19){
System.out.println(“我在睡觉”);

}否则,如果(time>=19&&time)您更新的时间变量与cat1和cat2变量无关,则可以更新
cat1.time
,而不是
time1.time
?(等)非常感谢,这是我正在寻找的答案,我知道其他答案会给我正确的结果。无法理解第二种方法,请编辑您的答案和详细答案