Java 当循环跳过if语句时?

Java 当循环跳过if语句时?,java,if-statement,while-loop,Java,If Statement,While Loop,这是一个运行康威生命模拟游戏的程序。 主要方法如下: public static void main(String Args[]) { int x = 0; int y = 0; boolean cellState[][] = new boolean[][]{}; boolean newCellState[][] = new boolean[][]{}; String answer; Scanner input = new Scanner(Syst

这是一个运行康威生命模拟游戏的程序。 主要方法如下:

public static void main(String Args[]) {
    int x = 0;
    int y = 0;
    boolean cellState[][] = new boolean[][]{};
    boolean newCellState[][] = new boolean[][]{};
    String answer;
    Scanner input = new Scanner(System.in);

    while (true) {
        System.out.print("\n Type anything for next generation, 'new' for new grid, or 'stop' to end>> ");
        answer = input.nextLine();
        if (answer == "new") {
            cellState = newCells(cellState);
        } else if (answer == "stop") {
            break;
        } else {
            System.out.println("Not an option yet");
        }
    }
}
无论输入什么答案,它都将跳过if语句并返回到循环的开头

据我所知,它与语句的实际内容无关,但可能与布尔表达式有关。

您应该使用它来比较
字符串,而不是
=

=
用于检查对象引用,而
.equals()
用于检查
字符串的值。
使用:
if(answer.equals(“new”)
并且你应该是金色的。

这一点已经解释得非常透彻。

字符串也可以与==进行比较,只要它们是内部化的。用双引号初始化的字符串已内部化

所以,在你的情况下,你可以这样做


answer=input.nextLine().intern()

我建议这样做:

if ("new".equals(answer)) {
   cellState = newCells(cellState);
} else if ("stop".equals(answer)) {
   break;
} else {
   System.out.println("Not an option yet");
}

由于字符串在java中是不可变的,这是否意味着
input.nextLine()
创建了一个新的
String
对象,该对象与“new”或“stop”字符串对象的引用不同?input.nextLine()返回一个字符串对象,该对象与字符串文本“new”或“stop”的引用不同,而这将起作用,如果不知道其中的含义,我建议不要使用此选项。理想情况下,在任何对象上都应该使用equals进行比较。我是说字符串有一个特例,它可以与==进行比较,因为java维护了一个用于性能改进的值表。Eclipse999,如果答案解决了您的问题,请单击旁边的绿色复选标记接受它。非常感谢。