2011-12-28 71 views
4

检查字符串我有这样的代码:阅读并从用户输入

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 :("); 
    } 
    } 
} 

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

“是啊,我编程这个权利!”

但它说

呀:(

+3

甲'String'是一个对象,而不是原始的。 – BalusC 2011-12-28 21:34:05

回答

9

您正在比较字符串不正确。您必须使用equals()方法,像这样:

if (answer.equals("yes")) 

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

编辑:

更妙的是,为防止NullPointerException,它被认为是一个很好的做法翻转比较秩序,先写你与比较字符串,像这样:

if ("yes".equals(answer)) 

原因很简单:如果由于某种原因answernull,上面的对比将评估为false(意为:answer"yes"),而第一个版本的代码将导致NullPointerException尝试调用equals()方法的null值。

+3

+1对这里的一切,但你还是应该翻转比较为了防止可能出现NPE。 (在我的答案的详细信息。) – ziesemer 2011-12-28 21:42:36

+0

@ziesemer同意,我编辑我的答案。 – 2011-12-28 21:48:03

1

使用String.equals()代替==

在Java中,==正在测试2个字符串是完全相同的情况下,在“a”!=“a”。相反,您需要测试"a".equals("a")

因此替换

if(answer == "yes"){ 

有:

if("yes".equals(answer)){ 

注意的是,这里翻转的顺序是故意的,因为这可以防止一个NullPointerException如果answer为空 - 如"yes".equals(null)只会返回false,而不是抛出异常。 (在null上调用操作会抛出NullPointerException,I.E. null.equals("yes")。)

2
if(answer == "yes"){ 

应该

if("yes".equals(answer)){ 

==是不正确的String平等,我们处理这种情况answer是空的情况下)

1

更改此

if(answer.equals("yes")){ 
    System.out.println("Yea I programmed this right!"); 
}else{ 
    System.out.println("Awww :("); 
} 

equals()方法比较小号字符串(答案在你的例子)到指定的对象。当且仅当参数不为null并且是表示与此对象相同字符序列的String对象时,结果为true。

明白,equals()方法和==操作执行两种不同的操作是很重要的。如刚刚提到的,equals()方法比较String对象内的字符。 ==运算符比较两个对象引用以查看它们是否引用同一个实例。

0

进口java.util.Scanner的;

公共类实施例{ 公共静态无效的主要(字串[] args){

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

/*Edit your next line as mine,u'll get the correct ans...*/ 

if("yes".equals(answer)){ 
    System.out.println("Yea I programmed this right!"); 
}else{ 
    System.out.println("Awww :("); 
} 

} }

0

,或者您可以尝试使用 “的compareTo()” 函数

private static Scanner input; 
private static String choice; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    input = new Scanner(System.in); 
    choice = input.nextLine(); 

    if (choice.compareTo("yes") == 0) { 
     System.out.println("Yea I programmed this right!"); 
    } else { 
     System.out.println("Awww :("); 
    } 

}