私は Codingbat.com の問題に取り組んでおり、+=
演算子にとって、a += b
が と必ずしも正確に等しいとは限らないという事実に出くわしましたa = a + b
。charAt()
これはよく知られており、以前に SO で議論されていましたが、上記の構文と組み合わせてメソッドを使用すると、理解できない奇妙なことが起こりました。
2 つの変数があるとします。
String str = "The";
String result = "";
「str」の最初の文字を「result」に 2 回追加します。これを行う 1 つの方法は次のとおりです。
result = result + str.charAt(0) + str.charAt(0);
になりますresult = "TT"
。
ただし、+=
演算子を使用すると、たとえば次のようになります。
result += str.charAt(0) + str.charAt(0);
私は得るresult = "168"
。明らかに文字の追加が行われています (「T」の ASCII コードは 84、84*2 = 168)。
+=
演算子を使用した最初のケースで実際に何が起こっているのか疑問に思っています。代入演算子に関するドキュメントによると、:E1 op= E2
は と同等E1 = (T)((E1) op (E2))
です。したがって、演算子"168"
を使用した場合と同じように、後者の式が出力されることを期待します。+=
しかし、次の出力"TT"
は正しく、そうではありません"168"
:
result = (String)(result + str.charAt(0) + str.charAt(0));
ドキュメントを誤解しただけですか?SO に関する回答も見つかりました。これは、str1 += str2
次と同等であることを示唆しています。
str1 = new StringBuilder().append(str1).append(str2).toString();
ただし、以下を評価します。
result = new StringBuilder().append(str.charAt(0)).append(str.charAt(0)).toString();
それでも"TT"
ではなくになり"168"
ます。
長文すみません!charAt()
String と を組み合わせて使用したときに実際に何が起こっているのかに興味があり+=
ます。これは、見つけた 2 つの "同等" (2 つから 3 つの用語を正しく翻訳した場合) が同じ結果を生成しないためです。