15

Javaを学び始めたばかりです。私がフォローしているオンラインコースでは、次のコードを試すように求められます。

String email1 = "meme@me.coh";
String email2 = "meme@me.com";
Boolean isMatch = false;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

isMatch次の行でメールアドレスを比較して値をに割り当てているときに、なぜfalseとして宣言するように求められるのかわかりませんisMatch
私はまったく同じように機能するように見える次のコードを試しました:

String email1 = "meme@me.coh";
String email2 = "meme@me.com";
Boolean isMatch;

isMatch = email1.equals (email2);

if (isMatch == true){
    System.out.println("Emails match");
}
else{
    System.out.println("Emails don't match");
}

isMatchコース上、私が最初に偽であると宣言している理由は説明されていません。isMatchメールアドレスを比較する前にfalseとして宣言しなければならない理由はありますか?

4

6 に答える 6

17

最初に宣言する必要がないだけでなくfalse、他にもいくつかの改善点を追加します。

  • boolean代わりに使用してください(理由がないBoolean場合もあります)null

  • 宣言時に割り当てる:

    boolean isMatch = email1.equals(email2);
    
  • ...そしてfinal可能であればキーワードを使用してください:

    final boolean isMatch = email1.equals(email2);
    

少なくとも最後のではなく:

if (isMatch == true)

次のように表すことができます。

if (isMatch)

これにより、isMatchフラグはそれほど有用ではなくなり、インライン化しても読みやすさが損なわれることはありません。私はそこにいくつかのより良いコース/チュートリアルを探すことをお勧めします...

于 2012-10-20T19:45:51.087 に答える
9

必ずしもそうする必要はありませんが、すべての変数を明示的に初期化することを好む人もいます(私もそうします)。特にさまざまな言語でプログラミングする人は、ケースバイケース/言語ごとに決定するよりも、常に変数を初期化するというルールを設定する方が簡単です。

たとえば、Javaにはブール値や整数などのデフォルト値があります。一方、Cは自動的に初期値を提供しません。メモリ内にあるものはすべて、自分で明示的に値を割り当てない限り、最終的には最終的に得られます。

上記の場合、あなたが発見したように、コードは初期化なしでも同様に機能します。特に、変数が次の行に設定されているため、特に冗長に見えます。場合によっては、これらの行の両方を組み合わせて(宣言と初期化-他のいくつかの投稿に示されているように)、両方のアプローチを最大限に活用できます。つまり、email1.equals (email2);操作の結果で変数を初期化します。

于 2012-10-20T19:44:52.010 に答える
2

それをする理由はありません。実際、私は宣言と初期化を次のように組み合わせることにします。

final Boolean isMatch = email1.equals (email2);

キーワードを使用して、final後で(誤って)変更することもできなくなります。

于 2012-10-20T19:45:50.033 に答える
1

まず第一に、あなたはそれらのどれも使うべきではありません。型を使用wrapperしていますが、プリミティブ型がある場合はめったに使用されません。booleanしたがって、むしろ使用する必要があります。

さらに、falseの初期デフォルト値を保持するようにboolean変数を初期化します。falseインスタンス変数として宣言した場合は、自動的にに初期化されfalseます。

ただし、デフォルト値を割り当てるかどうかに関係なく、完全にあなた次第です。私はむしろ宣言時にそれらを初期化することを好みます。

ただし、変数にすぐに割り当てる場合は、値を定義しなくても、変数に直接値を割り当てることができdefaultます。

だから、あなたの場合、私はそれを次のように使用します:-

boolean isMatch = email1.equals (email2);
于 2012-10-20T19:46:09.777 に答える
1

あなたの例では、そうする必要はありません。標準的なプログラミング手法として、たとえば、すべての変数がコードブロック内try{} catch(){}で参照され、ブロック外でも参照される場合は、最初にtryブロック外で変数を宣言する必要があります。

これは、equalsメソッド呼び出しが例外をスローする場合に役立ちますNullPointerException

     boolean isMatch = false;

     try{
         isMatch = email1.equals (email2);
      }catch(NullPointerException npe){
         .....
      }
      System.out.print("Match=="+isMatch);
      if(isMatch){
        ......
      }
于 2012-10-20T19:52:00.290 に答える
0

Levonが述べているように、これはドキュメントに記載されているように必須ではありません:http: //docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

これはおそらく、プリミティブデータ型のデフォルト値を保証しない他の言語の習慣のいずれかです。

于 2012-10-20T19:46:18.607 に答える