私は友人の Java の何人かを調べていますが、彼は現在眠っています。私のコンピューターには JDK がありませんし、人生で Java に触れたこともありません。この式のチェックサムの値は?
int score = 15;
String name = "Me";
String checksum = score + name + "salt";
//do stuff
私は友人の Java の何人かを調べていますが、彼は現在眠っています。私のコンピューターには JDK がありませんし、人生で Java に触れたこともありません。この式のチェックサムの値は?
int score = 15;
String name = "Me";
String checksum = score + name + "salt";
//do stuff
「15Mesalt」になります。
単純に整数を数値として文字列に追加するだけで、余分なものは何もありません。
in は文字列に変換されるため、 の値はchecksum
になります15Mesalt
。
文字列連結に関するJava 言語仕様 (15.18.1)から:
1 つのオペランド式のみが String 型である場合、実行時に文字列を生成するために、もう一方のオペランドに対して文字列変換が実行されます。
int を文字列に連結しています。In String 連結 int は String に変換されます。
そして結果は
15MEsalt
+
演算子は、型分析によって文字列連結または数値加算を表すと判断されたかどうかに関係なく、構文的に左結合です。演算子のいずれかのオペランドの型が+
文字列である場合、演算は文字列連結です。
したがって、式の結果score + name + "salt"
= "15Mesalt";
別のシナリオを次に示します。
System.out.println("Hello" + 'a' + 7);
System.out.println('a' + 7 + "Hello");
最初の出力はHelloa7
、2 番目の出力は です104Hello
。最初のステートメントでは、2 つの+
演算子の両方が文字列の連結を表しています。
しかし、2 番目の演算子については、+ 演算子は構文的に左結合であるため、'a'+7
最初に評価されます。次に、Java の自動型昇格メカニズムをトリガー'a'
し、対応する ASCII 値に切り替えて、97
それを に追加します。7
したがって、結果は次のようになり104
ます。 int値。次に104 + "Hello"
評価されます。2番目のオペランドは文字列であるため、+
演算子は現在文字列の連結を表しています。したがって、結果は104Hello
.
結果は15Mesalt
です。あなたの右の変数は、オペレーターがオペランドに連絡するString
ようになっています。+