なぜchar+他のchar=奇妙な数
-
19-09-2019 - |
質問
こちらのコードスニペット:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
の出力です:
195
それはなぜだ?いると考え 'a' + 'b'
いずれ "ab"
, "12"
や 3
.
していただきましたか。
解決
+
二つの char
は算数、文字列連結した.何かをしなくてはならないように "" + ca + cb
, 使 String.valueOf
や Character.toString
るための方少なくとも一つのオペランドの +
は String
のオペレーターする文字列連結した.
環太平洋の15.18添加剤事業者
場合にはいずれかのオペランドの
+
オペレーターがString
, その操作文字列を連結した.そうしないタイプの各オペランドの
+
オペレーターでなければなタイプに転換できるプリミティブの数値タイプ、またはコンパイル時にエラーが発生します。
ぜいただけます(195ですがASCII 'a' = 97
や 'b' = 98
, は、 97 + 98 = 195
.
この行の基礎 int
や char
鋳物製となります。
char ch = 'a';
int i = (int) ch;
System.out.println(i); // prints "97"
ch = (char) 99;
System.out.println(ch); // prints "c"
この無視し、問題の文字エンコーディングスキーム(初心者にはな...真.
また、ジブロッホかっていることは残念なが +
が多重定義されています両方の文字列の連結および整数を追加"されている誤り過負荷の+演算子の文字列を連結した." -- Java Puzzlers, パズル11:最後の笑)。多くの種類の混乱がって簡単に回避の異なるトークン文字列を連結した.
参照
他のヒント
私は、Javaを話すことはありませんが、195は+ 98 97 = a
とb
のためのASCIIコードです。だから、明らかに、ca
とcb
は、おそらく自動的に文字列連結につながるとは思えない+
添加の、その整数値として解釈されます。
あなたがオペランドとしてString型を使用する必要が+演算子の結果として文字列を持っているしたい場合。
あなたは書く必要があります:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
+演算子は算術和として動作チャーオペランドに適用した。
+
演算子は、文字の上に動作しません。 97と98 - - 何をここで起こっていることはa
とb
は、その整数のASCIIコードポイントにキャストされていることである。その後、一緒に追加