我的 if-then-else
语句始终输出 else
结果
import java.util.Scanner;
public class NiallScanner {
public static void main(String[] args)
{
System.out.println("Hello, What is your name?");
Scanner scanner = new Scanner(System.in);
String yourName = scanner.nextLine();
System.out.println("Is your name: "+yourName + "?");
Scanner scanner1 = new Scanner(System.in);
String isCorrect = scanner1.nextLine();
if (isCorrect == "Yes")
{
System.out.println("Thank you for your confirmation!");
}
else
{
System.out.println("Retry please.");
}
}
任何想法为什么男人?我是java btw的新手,所以我可能会忽略基本的编码错误。
答案 0 :(得分:2)
使用"Yes".equals(isCorrect);
,==
比较对象引用,而不是内容。两个不同的Strings
可以具有相同的内容。
或者,您可以使用String.intern()从字符串池中获取唯一引用;可以使用==
运算符安全地比较这些:
"Yes" == isCorrect.intern();
虽然这两种方法都有效,但我建议你选择第一种方法。使用equals
比较对象和==
来比较基元。
答案 1 :(得分:1)
使用equals()
方法,因为==
比较对象引用它包含的位,以查看两个对象是否引用同一个对象。但equals()
方法会比较该值。所以在这种情况下你应该做:"Yes".equals(isCorrect)
如果要检查两个对象是否引用同一对象,例如:
Object1 x = new Object1();
Object2 y = x;
if(x == y) {
//This will return true because 'y' is refering to object 'x' so both has the bit to access the object on memory.
}
但是如果你想按值检查,例如:
String hola1 = "hola";
String hola2 = "hola";
if(hola1.equals(hola2)){
//Return true because both has the same value.
}
答案 2 :(得分:0)
使用equals方法比较字符串。==将比较引用而不是内容。请找到更正的程序。
public class NiallScanner {
public static void main(String[] args) {
System.out.println("Hello, What is your name?");
Scanner scanner = new Scanner(System.in);
String yourName = scanner.nextLine();
System.out.println("Is your name: "+yourName + "?");
Scanner scanner1 = new Scanner(System.in);
String isCorrect = scanner1.nextLine();
if (isCorrect.equals("Yes"))
{
System.out.println("Thank you for your confirmation!");
}
else
{
System.out.println("Retry please.");
}
}
}