4

わかりました、私はこの単純なものを作ろうとしていますが、うまくいきません。私は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");
         }
     } 
 }
4

5 に答える 5

6

さて、最初に、==は言語の基本的な演算子です。式の結果の型はブール値です。ブール型を比較す​​るために、同じ真理値のオ​​ペランドを比較します。参照型を比較す​​るために、同じ参照値のオペランドを比較します(つまり、同じオブジェクトを参照するか、両方ともnullです)。数値型の場合、同じ整数値または同等の浮動小数点値のオペランドを比較します。Java言語仕様を参照してください。

対照的に、equals()は、基本的にjava.lang.Objectクラスによって定義されるインスタンスメソッドです。このメソッドは、慣例により、レシーバーオブジェクトが渡されたオブジェクトと「等しい」かどうかを示します。Objectクラスでのこのメソッドの基本実装は、参照が等しいかどうかをチェックします。あなたが書いたものを含む他のクラスは、このメソッドをオーバーライドして、より専門的な同等性テストを実行する場合があります。Java言語仕様を参照してください。

ほとんどの人にとっての典型的な「落とし穴」は、Stringクラスのequals()メソッドを実際に使用する必要があるときに2つの文字列を比較するために==を使用することです。上記から、両方の参照が同じ実際のオブジェクトを参照している場合にのみ、演算子が「true」を返すことがわかります。ただし、文字列の場合、ほとんどの用途では、2つの文字列の値が同じかどうかを知りたいと考えています。2つの異なる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");
     }
于 2012-04-29T04:58:15.363 に答える
3

slctn.equals("a")動作します。

これを読んで理由を理解してください: Javaの==とequals()の違いは何ですか?

于 2012-04-29T04:51:19.410 に答える
3

Javaでは、2つのオブジェクトが等しいかどうかを比較する必要がある場合(つまり、それらが同じ値を持っているかどうかを判断するため)、を使用する必要がありますequals()==演算子は、2つのオブジェクトが同一であるかどうか、つまり、メモリ内のオブジェクトがまったく同じであるかどうかをテストするために使用されます。コードで、これを置き換えます。

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

これとともに:

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

また、 nullの場合に備えて、比較の順序("a"前)を逆にすることをお勧めします。slctnslctn

于 2012-04-29T04:58:08.203 に答える
1

Javaでは、任意のオブジェクトを照合する場合、==演算子はそれら2つのオブジェクトの参照のみを照合します。

あなたの例をとると、slctn=="a"です。slctnの参照値がabc123であるとすると、他のスティング「a」は同じオブジェクトではないため、異なる参照値になります。

メソッド.equalsは、文字列オブジェクトの文字が何であるかをチェックし、2つの文字列の文字の値と一致します。したがって、オブジェクトslctnに「a」が含まれている場合、それは文字列「a」と一致します。

于 2012-04-29T05:00:11.597 に答える
0

Java==演算子で、サンプルの2つのオブジェクトの参照を比較します。

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での差分参照であるために発生します。この問題を解決するには、2つのオブジェクトをequalsメソッドごとに比較する必要があります。サンプル用

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

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

結果は次のようになります:

true

于 2012-04-29T05:02:15.433 に答える