私の理解では、charは単一の文字、つまり文字、数字、句読点、タブ、スペースなどです。したがって、私が行うとき:
char c = '1';
System.out.println(c);
出力1はまさに私が期待したものでした。それで、私がこれをするとき、それはなぜですか:
int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);
私は出力50で終わりますか?
これは、charのASCII値を追加しているためです。最初にintに変換する必要があります。
番号1はASCIIコード49です。コンパイラーは、要求に対して実行できる唯一の賢明なことを実行し、intに型キャストします。
次の行で50
、加算の結果をとして扱うようにJavaに指示したため、最終的にはoutになります。int
int ans = a + c;
あなたの代わりに。としてint
宣言ans
しますchar
。
そのようです:
final int a = 1;
final char c = '1';
final char ans = (char) (a + c);
System.out.println(ans);
c(1)の値を'a'のユニコード値(49)に追加しているためです。最初の128個のユニコードポイント値はASCIIと同じであるため、次の場所にあります。
Chr'1'が12月49日であることに注意してください。残りのUnicodeポイントは次のとおりです。
charは偽装されたintです。charは、文字をintにコーディングすることによって文字を表します。したがって、たとえば「c」は49でコード化されます。これらを合計すると、charのコードとintの値の合計であるintが得られます。
「1」は数字ではなく数字であり、ASCIIでエンコードされて値が49になります。
Javaの文字はintにプロモートできるため、「1」のような文字、エイリアス49に1のようなintを追加するように要求すると、より狭いタイプのcharがintにプロモートされ、49、+ 1=>50になります。
数字以外のすべての文字を同じ方法で追加できることに注意してください。
'a' + 0 = 97
'A' + 0 = 65
' ' + 0 = 32
'char'は、実際には2バイトの符号なし整数です。
値'1'
と1
は大きく異なります。'1'
2バイト値49としてエンコードされます。
「文字エンコード」はあなたが研究したいトピックです。または、Java言語仕様から:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1