java中的引用变量不会改变其状态

时间:2016-08-06 20:39:18

标签: 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.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的状态在这里是常量,并且不会根据新输入而改变。

3 个答案:

答案 0 :(得分:3)

你必须做这样的事情:

grep '^<li>.*</li>'

因为您有6个不同的对象,而您正在更改时间对象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(); 。 cat1对象未与time1, time2, time3,time4

相关联

答案 1 :(得分:0)

这种情况正在发生,因为您正在通过其他实例执行操作操作(例如cat1而不是time1)。由于这些是实例变量,因此它们仅限于该实例。

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

  }).done(function(data) {
    /* do stuff */
  });

答案 2 :(得分:0)

可以获得所需的输出,

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

float time;静态/类变量设为static float time;。这样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();
   }
}