Java扫描程序代码If-then-else

时间:2014-02-19 00:33:27

标签: java if-statement

我的 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的新手,所以我可能会忽略基本的编码错误。

3 个答案:

答案 0 :(得分:2)

使用"Yes".equals(isCorrect);==比较对象引用,而不是内容。两个不同的Strings可以具有相同的内容。

或者,您可以使用String.intern()从字符串池中获取唯一引用;可以使用==运算符安全地比较这些:

"Yes" == isCorrect.intern();

虽然这两种方法都有效,但我建议你选择第一种方法。使用equals比较对象和==来比较基元。

查看Working example

答案 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.");

    }
}

}