1

右から左に割り当てが行われている場合、なぜ以下を実行してもコンパイラエラーが発生しないのですか?

String str = str = "";
4

4 に答える 4

2

動作は、代入演算子に関するJava言語仕様#15.1によって定義されています。つまり(私の強調):

それ以外の場合は、次の3つの手順が必要です。

  • 最初に、左側のオペランドが評価されて変数が生成されます。この評価が突然完了すると、同じ理由で代入式が突然完了します。右側のオペランドは評価されず、割り当ては発生しません。
  • それ以外の場合は、右側のオペランドが評価されます。この評価が突然完了すると、同じ理由で割り当て式が突然完了し、割り当ては発生しません。
  • それ以外の場合、右側のオペランドの値は左側の変数のタイプに変換され、値セットの変換(§5.1.13)が適切な標準値セット(拡張指数値セットではない)になります。変換の結果は変数に格納されます。

したがって、式の評価はstr = str = "";右から左ですが、左側のオペランドString strが最初に評価され、変数が作成されます。

于 2012-08-17T11:39:38.123 に答える
0

Java言語仕様のパラグラフ6.3によると、独自の初期化子内で(ローカル)変数を使用することが許可されています。

ブロック内のローカル変数宣言のスコープ(§14.4)は、宣言が表示されるブロックの残りの部分であり、独自の初期化子で始まり、ローカル変数宣言ステートメントの右側にさらに宣言子が含まれます。

初期化される前に変数を読み取ることは許可されていませんが、そのステートメントはそれを行いません。

于 2012-08-17T12:01:17.880 に答える
0

Javaでは、オブジェクトを右から左に割り当てることができます。

次のコードはこれを明確に示しています。

String a;
String b;
String c;
String str = a = b = c = "Hello World!";

2番目のstrのようなものはありません。

String str = str = ""; // There is only 1 str here and it is declared properly.Thus the compiler doesnt give any error.

String str = a = ""; // This will give Error Though since a is undeclared
于 2012-08-17T11:28:13.193 に答える
0

コンパイラは警告を生成します。Assignment to variable str has no effectこれは、コンパイラが単にそれを次のように置き換えることを意味します。

  String str = "";
于 2012-08-17T11:34:53.003 に答える