从用户输入中读取和检查字符串

Col*_*ole 4 java string user-input input

我有这个代码:

import java.util.Scanner;

public class Example {
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    String answer = input.nextLine();

    if(answer == "yes"){
        System.out.println("Yea I programmed this right!");
    }else{
        System.out.println("Awww :(");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它并键入yes时,应该说

"是的,我把它编程好了!"

但它说

" Awww :( "

Ósc*_*pez 10

你错误地比较了字符串.你必须使用这个equals()方法,如下所示:

if (answer.equals("yes"))
Run Code Online (Sandbox Code Playgroud)

当你在Java编程中,操作者==一般用于比较原始数据类型(int,double,等).如果您==用于比较两个对象类型(如字符串),则将它们与标识进行比较,即检查它们是否在内存中引用相同的对象.在你的情况下,你需要的是比较它们是否相等:如果它们具有完全相同的值(在这种情况下是一串字符),即使它们是两个不同的对象 - 为此你必须使用该equals()方法.

编辑:

更好的是,为了防止a NullPointerException,它被认为是一种很好的做法,可以翻转比较的顺序并首先编写你要比较的字符串,如下所示:

if ("yes".equals(answer))
Run Code Online (Sandbox Code Playgroud)

原因很简单:如果由于某种原因answernull,上面的比较将计算为false(意思是:answer是不是"yes"),而代码的第一个版本将导致NullPointerException试图调用时,equals()在方法null的价值.

  • 这里的所有内容都是+1,但您仍应按顺序翻转比较以防止可能的NPE.(我的回答详细说明.) (3认同)