0

初期化されていない最終変数を宣言することと、最終変数を null に設定することの違いは何ですか?

void A(String pizza) {
    String retVal = null;

    if (StringUtils.isBlank(pizza)) {
       retVal = "blank"
    } else {
       retVal = computeString(pizza);
    }
}

void A(String pizza) {
    final String retVal;

    if(StringUtils.isBlank(pizza)) {
       retVal = "blank"
    } else {
       retVal = computeString(pizza);
    }
}
4

5 に答える 5

2

理解できなかったかもしれませんが、2 番目の例では、ブロックretVal後に再割り当てすることはできません。変数_if-elsefinal

一度だけ割り当てることができます。変数 final を宣言すると、その値が変更されないという有用なドキュメントとして機能し、プログラミング エラーを回避するのに役立ちます。

final変数をに設定した場合、ブロックnull内で再割り当てすることはできません。if

于 2013-10-11T17:56:47.723 に答える
1

違いは、最終変数を別の値に変更できないことです。

于 2013-10-11T17:59:23.033 に答える
0

これでは、 はretVal = null何も達成しません。null の値を指定します。その値を使用するコードはありません。次に、if-then を実行するか、else 部分を実行するかに応じて、別の値を指定します。

コメントを追加した場所に該当するコードでは、 の値を使用または変更できますretVal

  void A(String pizza) {
      String retVal = null;
      ... code in here could use it or give it a new value ...
      if(StringUtils.isBlank(pizza) {
         retVal = "blank"
      } else {
         retVal = computeString(pizza);
      }
      ... additional code here might change it (and can use it's value) ...
   }

retValこの例では、メソッドが呼び出されるたびに値を指定する必要があります。あなたの if-then-else コードがそれを行います。値が与えられた後は、値を変更することはできません。

retVal違いの 1 つは、値を指定する前に使用したかどうかをコンパイラが通知することです。当然のことながら、変数にはまだ値がないことがわかります。

   void A(String pizza) {
      final String retVal;
      ... code in here cannot use it or give it a value, too ...
      if(StringUtils.isBlank(pizza) {
         retVal = "blank"
      } else {
         retVal = computeString(pizza);
      }
      ... additional code here cannot change it but can use it's value ...
   }
于 2013-10-11T18:05:29.167 に答える