Java 即使求值为true,If语句也不会执行

Java 即使求值为true,If语句也不会执行,java,Java,在下面的代码中,if(timesout[entry]=“exit”)下的块将永远不会执行。我已经验证了当前循环的timeout[entry]是否在调试模式下设置为“exit”,以及是否在计算if语句之前打印出变量,但不管怎样,当我在提示下输入exit时,该块永远不会执行,我不知道为什么 import java.util.Scanner; public class timetracker { public static void main(String args[]) { boolean

在下面的代码中,
if(timesout[entry]=“exit”)
下的块将永远不会执行。我已经验证了当前循环的
timeout[entry]
是否在调试模式下设置为“exit”,以及是否在计算if语句之前打印出变量,但不管怎样,当我在提示下输入
exit
时,该块永远不会执行,我不知道为什么

import java.util.Scanner;

public class timetracker {
public static void main(String args[]) {
    boolean exit = false;
    String[] reasons = new String[30];
    String[] timesout = new String[30];
    String[] timesin = new String[30];
    int entry = 0;
    Scanner keyinput = new Scanner(System.in);

    recordloop:
    while(exit == false) {
        //record info



        System.out.println("Enter time out:");
        timesout[entry] = keyinput.nextLine();

        if(timesout[entry] == "exit") {
            exit = true;
            break recordloop;   
        }

        System.out.println("Enter reason:");
        reasons[entry] = keyinput.nextLine();
        System.out.println("Enter time in:");
        timesin[entry] = keyinput.nextLine();

        entry = entry + 1;

    }

    System.out.println("Times away from phone:\n ----- \n");
    int count = entry;
    entry = entry + 1;

    while(count < entry) {
        System.out.println(reasons[count] + ": " + timesout[count] + " - " + timesin[count] + "\n");
        count = count + 1;
    }
}
}
import java.util.Scanner;
公共类时间跟踪器{
公共静态void main(字符串参数[]){
布尔退出=假;
字符串[]原因=新字符串[30];
字符串[]timesout=新字符串[30];
字符串[]timesin=新字符串[30];
int entry=0;
扫描仪按键输入=新扫描仪(System.in);
记录循环:
while(exit==false){
//记录信息
System.out.println(“输入超时:”);
timeout[entry]=keyinport.nextLine();
如果(超时[输入]=“退出”){
退出=真;
打破记录循环;
}
System.out.println(“输入原因:”);
原因[输入]=keyinput.nextLine();
System.out.println(“输入时间:”);
timesin[entry]=keyinput.nextLine();
条目=条目+1;
}
System.out.println(“远离电话的时间:\n----------\n”);
整数计数=输入;
条目=条目+1;
while(计数<输入){
System.out.println(原因[count]+“:“+timesout[count]+”-“+timesin[count]+”\n”);
计数=计数+1;
}
}
}
使用
equals()
比较字符串,
==
比较引用等式

使用
equals()
比较字符串,
==
比较引用等式

    • 而不是

      if(timesout[entry] == "exit") 
      
      使用

      ==和equals()之间不同的更多信息

      而不是

      if(timesout[entry] == "exit") 
      
      使用

      ==和equals()之间不同的更多信息

      你能试试吗

      if("exit".equals(timesout[entry]))
      
      而不是

      if(timesout[entry] == "exit")
      
      正如
      @Jigar Joshi
      所指出的那样,你应该了解
      ==
      equals()的区别和意义。你能试试吗

      if("exit".equals(timesout[entry]))
      
      而不是

      if(timesout[entry] == "exit")
      

      正如
      @Jigar Joshi
      所指出的,您应该了解
      ==
      equals()

      的区别和含义,因为字符串总是使用.equals()进行比较。的可能副本有一些常见问题。比较字符串是Java程序员遇到的许多常见问题之一。for string始终使用.equals()进行比较。的可能重复项有一小部分常见问题。比较字符串是Java程序员遇到的许多常见问题之一。我是一名c#程序员,所以我也会为此而挣扎。那么这是否意味着java不使用不可变字符串呢?别担心,我会用谷歌搜索;-)java会,但它不会缓存池中的所有字符串,所以最好使用equals()来比较对象equalityAh是的,谷歌快速搜索也显示了这一点,谢谢。奇怪的是,将字符串变量与字符串文字进行比较并不会导致编译器警告,那么?我的意思是,程序员想做什么是非常清楚的(我想不出有哪种情况我想检查我的变量是否引用了在“后端”中为我创建的表示文字的相同字符串)。谢谢!我天生是一个PHP程序员,所以我不确定这里发生了什么。字符串缓存文本池中的实例,在这里您可以简单地比较它们是否相等,然后两个对象都相同,因此相等。我是一名c#程序员,所以我也会为此而挣扎。那么这是否意味着java不使用不可变字符串呢?别担心,我会用谷歌搜索;-)java会,但它不会缓存池中的所有字符串,所以最好使用equals()来比较对象equalityAh是的,谷歌快速搜索也显示了这一点,谢谢。奇怪的是,将字符串变量与字符串文字进行比较并不会导致编译器警告,那么?我的意思是,程序员想做什么是非常清楚的(我想不出有哪种情况我想检查我的变量是否引用了在“后端”中为我创建的表示文字的相同字符串)。谢谢!我天生是一个PHP程序员,所以我不确定这里发生了什么。字符串缓存文本池中的实例,您可以简单地比较它们是否相等,然后两个对象都相同,因此相等
      if(timesout[entry] == "exit")