私は次のクラスを持っています:
public class Go {
public static void main(String args[]) {
System.out.println("G" + "o");
System.out.println('G' + 'o');
}
}
これがコンパイル結果です。
Go
182
出力に数値が含まれるのはなぜですか?
私は次のクラスを持っています:
public class Go {
public static void main(String args[]) {
System.out.println("G" + "o");
System.out.println('G' + 'o');
}
}
これがコンパイル結果です。
Go
182
出力に数値が含まれるのはなぜですか?
2 番目のケースでは、2 つの文字 (G - 71 と o - 111)のUnicodeコードを追加し、合計を出力します。これはchar
、数値型と見なされるためです+
。この場合、演算子は通常の合計です。
+
文字定数を指定した operator'G' + 'o'
は、charCode の加算と、 will を指定した文字列連結演算子を"G" + "o"
出力しGo
ます。
Java のプラスは、被加数の 1 つが文字列でない限り、2 つの数値を加算します。文字列の場合は、文字列連結を行います。
2 番目のケースでは、文字列がありません (がありchar
、その Unicode コード ポイントが追加されます)。
System.out.println("G" + "o");
System.out.println('G' + 'o');
最初の + は連結演算子として機能し、2 つの文字列を連結します。しかし、2 番目のケースでは、加算演算子として機能し、これら 2 つの文字の ASCII (または UNICODE と言うことができます) 値を加算します。
この前の SO の質問は、この件名にいくつかの光を当てる必要があります。あなたの場合、基本的に ASCII 値 (G の場合は 71) + (o の場合は 111) = 182 を追加することになります。ここで値を確認できます)。
を使用しString.valueOf(char c)
て、その文字を文字列に戻す必要があります。
+sum
は、それが数値以外の場合は常に (2 つの数値を追加する目的で)String
使用さString
れますString
。
Java の char は常に数値を表すことがわかっています。
そのため、実際には(71+111)=182
、文字の連結ではなく、2 つの数値の合計をg
+ o
=として計算します。go
それらの1つを次のように変更するとString
、2つが連結さ れ、期待どおりSystem.out.println('G' + "o")
に印刷されます。Go
「+」演算子は、int
との両方に対して定義されていString
ます。
int + int = int
String + String = String
char + char を追加すると、最適な一致は次のようになります。
(char->int) + (char->int) = int
しかし""+'a'+'b'
、あなたに与えるでしょうab
:
( (String) + (char->String) ) + (char->String) = String