2012-04-29 31 views
4

好吧我试图做这个简单的事情,但它不会工作。我是一名Java初学者,希望得到一些帮助。每次我运行下面的代码,我得到输出这不是一个有效的选项。我究竟做错了什么?不能得到其他语句在Java中工作

package test; 

import java.util.Scanner; 

public class options { 
    public void options() { 
     Scanner scnr = new Scanner(System.in); 
     String slctn; 

     System.out.println("What would you like to do?"); 
     System.out.println("a) Travel the expedition"); 
     System.out.println("b) Learn more about the expedition"); 

     slctn = scnr.nextLine(); 
     if (slctn == "a"){ 
      travel exeTravel = new travel(); 
      exeTravel.travel(); 
     }else if (slctn=="b"){ 
      learn exeLearn = new learn(); 
      exeLearn.learn(); 
     }else{ 
      System.out.println("That is not a valid option"); 
     } 
    } 
} 
+0

欢迎SO。你可能可以通过搜索找到答案,但是因为你是初学者,所以很难知道要搜索什么。我给你+1,因为你的问题的_form_对于SO来说是完美的。你可以阅读[faq]和[ask],或者已经知道如何制定问题:-) – 2012-04-29 05:03:54

+0

它是'Java'中的基础,你可以找到非常简单的网页来解释它(尽管我没有投票) – MJM 2012-04-29 05:04:29

+0

不要忘记upvote所有有用的答案,并通过单击该答案的投票计数下的复选框“接受”您认为最有用的答案。 – 2012-04-29 05:05:34

回答

6

那么,首先,==是该语言的基本操作符。表达式的结果类型是一个布尔值。为了比较布尔类型,它比较相同真值的操作数。为了比较参考类型,它比较相同参考值的操作数(即参考相同的对象或都是空的)。对于数字类型,它比较相同整数值或等效浮点值的操作数。请参阅Java Language Specification

相比之下,equals()是一个基本上由java.lang.Object类定义的实例方法。按照惯例,此方法指示接收方对象是否“等于”传入的对象。 Object类中此方法的基本实现将检查引用是否相等。其他类(包括您编写的类)可能会覆盖此方法以执行更专门的等效性测试。请参阅Java Language Specification

对于大多数人来说,典型的“陷阱”是在使用==比较两个字符串时,他们确实应该使用String类的equals()方法。从上面可知,当两个引用引用相同的实际对象时,操作符只会返回“true”。但是,对于字符串,大多数用途都想知道两个字符串的值是否相同 - 因为两个不同的String对象可能都具有相同(或不同)的值。

 slctn = scnr.nextLine(); 
    if (slctn.equals("a")){ 
     travel exeTravel = new travel(); 
     exeTravel.travel(); 
    }else if (slctn.equals("b")){ 
     learn exeLearn = new learn(); 
     exeLearn.learn(); 
    }else{ 
     System.out.println("That is not a valid option"); 
    } 
3

在Java中,当你需要比较两个对象为平等(即,以确定它们是否具有相同的值),则必须使用equals()==运算符用于测试两个对象是否相同,即:如果它们在内存中完全相同的对象。有了这个

slctn == "a" 
slctn == "b" 

:在你的代码中,替换该

"a".equals(slctn) 
"b".equals(slctn) 

还要注意它的反转比较("a"slctn之前)的顺序是一个好主意,以防万一slctn为null 。

1

在java中匹配时任何对象==运算符将只匹配这两个对象的参考。

如果我们把你的例子slctn ==“a”。说slctn在abc123有它的参考价值,你的另一个刺“a”将有不同的参考价值,因为它不是同一个对象。

方法.equals检查字符串对象中的字母,并匹配两个字符串中字母的值。因此,如果你的对象slctn包含“A”,它将匹配字符串“a”

1

在java中==操作比较两个对象的引用,样本:

String s_1 = new String("Sample"); 
String s_2 = new String("Sample"); 

System.out.println(s_1 == s_2); 

结果将是:

false

发生这种情况是因为s_1是内存中的引用,而s_2也是memroy中的差异引用。 为了解决这个问题,你必须通过equals方法比较两个对象。对于样品

String s_1 = new String("Sample"); 
String s_2 = new String("Sample"); 

System.out.println(s_1.equals(s_2)); 

结果将是:

true