次のコード例があります。
int pay = 80;
int bonus = 65;
System.out.println(pay + bonus + " " + bonus + pay);
次の出力が得られる理由を誰かに説明してもらえますか:
145 6580
なぜなら、これはoperator overloading
問題です。ここで、First+
はplus
operator、last+
はconcat
operator です。
System.out.println(pay + bonus + " " + bonus + pay);
| |
(plus) (concat)
" " の前、整数としての支払いとボーナス、加算された結果は 145 です。 " " の後、ボーナスと文字列としての支払い、結果は "6580" です。
他の人が言っているように、コンパイラは最初に整数値を追加してから結果を出力します。 " " の後、合計値が String
型に変更され、その+
演算子が連結アクションとして機能します。その出力を取得しないようにするには、次のようにします。
System.out.println(String.valueOf(pay) + String.valueOf(bonus) + " " + String.valueOf(bonus) + String.valueOf(pay));
println の最初の支払いとボーナスは整数を返します。そのため、支払いとボーナスを計算し、出力する前に整数として返します。
ただし、「」の後。+ 操作は文字列の連結になり、その後はすべて連結された文字列として返されます。したがって、("" + ボーナス + 支払い) は "6580" として返されます。
bonus
とpay
はどちらも int であるため、1 つの int の結果に結合されます。
それらの間に空の文字列を挿入する必要があります。