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")