4

私の質問がばかげているかどうかは申し訳ありませんが、それは問題ではありません。しかし、これら2つの条件で何が起こるか知りたいだけです。

public class Test {
    public static void main(String[] args) 
    {
        String str="test";
        if(str.equals("test")){
            System.out.println("After");
        }
        if("test".equals(str)){
            System.out.println("Before");
        }
    }
}

どちらも同じ結果しか出ていません。しかし、私はいくつかの理由があることを知っています.私はそれについて知りません. これら2つの条件の違いは何ですか?

4

6 に答える 6

12

それらの間にまったく違いはありません。多くのプログラマーは、を取得しないようにするためだけに2番目の方法を使用しますNullPointerException。それで全部です。

    String str = null;

    if(str.equals("test")) {  // NullPointerException
        System.out.println("After");
    }
    if("test".equals(str)) {  // No Exception will be thrown. Will return false
        System.out.println("Before");
    }
于 2012-10-26T09:16:07.337 に答える
2

2番目のものはスローしませんNullPointerException。しかし、それが起こる可能性があるため、これも悪いコードと見なされstrますnullyou do not detect that bug at this point instead you detect it somewhere else

  1. 1プログラムのバグを早い段階で見つけるのに役立つので、好みの選択肢が与えられます。
  2. それ以外の場合は、文字列が実際に等しくないか、2番目の文字列が存在しないかを確認nullできstrますnull

    if(str == null){
    //Add a log that it is null otherwise it will create confusion that 
    // program is running correctly and still equals fails
    }
    if("test".equals(str)){
        System.out.println("Before");
    }
    

最初のケースの場合

    if(str.equals("test")){//Generate NullPointerException if str is null
        System.out.println("After");
    }
于 2012-10-26T09:15:58.333 に答える
2

実はどちらも同じです。この 2 つに違いはありません。http://www.javaworld.com/community/node/1006 Equal メソッドは、2 つの文字列オブジェクトの内容を比較します。したがって、最初のケースでは str 変数を "test" と比較し、2 番目のケースでは "test" を str 変数と比較します。

于 2012-10-26T09:21:30.377 に答える
1

彼らはほとんど同じことをします。

唯一の違いは、最初の例では文字列オブジェクト "str" の equal() メソッドをパラメーターとして "test"-string とともに使用し、2 番目の例では文字列 "text" と "str" の equal() メソッドを使用していることです。パラメータとして。

2 番目のバリアントは、明らかに null ではないため、NullPointerException をスローできません。

于 2012-10-26T09:45:39.630 に答える
1

最初のif-statement テスト、strequalsかどうか"test"。2 番目のif-statement テスト、"test"等しいかどうかstr。したがって、これら 2 つのステートメントの違いは、最初のステートメントでは、引数 を使用してオブジェクトにifメッセージを送信することです。次に、オブジェクトが引数と等しいかどうかを比較し、またはを返します。2 番目のステートメントは、にメッセージを送信します。も文字列オブジェクトです。だから今、それが等しいかどうかを比較し、またはを返します。str"test"strtruefalseif"test""test""test"strtruefalse

于 2012-10-26T09:23:48.947 に答える
0

最初に静的文字列を修正しようとすると、多くの状況でnullpointer例外を回避できます。

于 2012-10-26T09:16:22.983 に答える