17

この行で問題に直面しています(以下にコメント):

System.out.println("Using == ::"+s3==s4)

を出力しますfalse

ただし、System.out.println(s3==s4)出力true.

今、私はなぜこの結果を得ているのか理解できません:

public class string {
    public static void main(String[] args){
        String s3="Shantanu";
        String s4=s3;
        String s1=new String("java");
        String s2=new String("javaDeveloper");

        System.out.println("Using Equals Method::"+s1.equals(s2));
        System.out.println("Using Equals Method::"+s3.equals(s4));
        System.out.println("Using == ::"+s3==s4);//Problem is here in this line
        System.out.println(s1+"Directly printing the s2 value which is autocasted from superclass to string subclass ");
        System.out.println("Directly printing the s1 value which is autocasted from superclass to string subclass "+s2);
        System.out.println(s3);
    }
}
Equals メソッドを使用した出力::false
Equals メソッドの使用::true
== ::false の使用
javaスーパークラスから文字列サブクラスに自動キャストされたs2値を直接出力する
スーパークラスから文字列サブクラス javaDeveloper に自動キャストされる s1 値を直接出力する
4

3 に答える 3

35

ブラケットのセットがありません:

System.out.println("Using == ::" + (s3==s4));

あなたのバージョンで"Using == ::" + s3は、 は と比較されて==s4ますが、これはあなたが望むものではありません。

一般に、+は よりも優先順位が高く、これがとして評価されている==理由です。"Using == ::" + s3==s4("Using == ::" + s3) == s4

于 2013-08-14T17:14:28.173 に答える
14

このコードを使用しています:

System.out.println("Using == ::"+ s3==s4);

次のように評価されています。

System.out.println( ("Using == ::" + s3) == s4);

したがって、出力としてfalseになります。

理由は、演算子の優先順位が次の表+よりも高いためです: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html==Operator Precedence

他の回答によると、ブール式を囲む括弧を使用する必要があります。

System.out.println("Using == ::" + (s3==s4));
于 2013-08-14T17:16:05.263 に答える
5

行は正しいです:

"Using == ::"+s3等しくないs4

コードを変更する必要があります。

"Using == ::"+(s3==s4)

編集: 与えられたコードの出力は次のとおりです。

Using Equals Method::false
Using Equals Method::true
false
javaDirectly printing the s2 value which is autocasted from superclass to string subclass 
Directly printing the s1 value which is autocasted from superclass to string subclass javaDeveloper
Shantanu
于 2013-08-14T17:15:21.310 に答える