6

私の理解では、charは単一の文字、つまり文字、数字、句読点、タブ、スペースなどです。したがって、私が行うとき:

char c = '1';
System.out.println(c);

出力1はまさに私が期待したものでした。それで、私がこれをするとき、それはなぜですか:

int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);

私は出力50で終わりますか?

4

7 に答える 7

8

これは、charのASCII値を追加しているためです。最初にintに変換する必要があります。

于 2012-04-27T22:19:20.453 に答える
2

番号1はASCIIコード49です。コンパイラーは、要求に対して実行できる唯一の賢明なことを実行し、intに型キャストします。

于 2012-04-27T22:20:30.720 に答える
2

次の行で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);
于 2012-04-27T22:21:01.133 に答える
1

c(1)の値を'a'のユニコード値(49)に追加しているためです。最初の128個のユニコードポイント値はASCIIと同じであるため、次の場所にあります。

http://www.asciitable.com/

Chr'1'が12月49日であることに注意してください。残りのUnicodeポイントは次のとおりです。

http://www.utf8-chartable.de/

于 2012-04-27T22:21:50.657 に答える
0

charは偽装されたintです。charは、文字をintにコーディングすることによって文字を表します。したがって、たとえば「c」は49でコード化されます。これらを合計すると、charのコードとintの値の合計であるintが得られます。

于 2012-04-27T22:20:47.020 に答える
0

「1」は数字ではなく数字であり、ASCIIでエンコードされて値が49になります。

Javaの文字はintにプロモートできるため、「1」のような文字、エイリアス49に1のようなintを追加するように要求すると、より狭いタイプのcharがintにプロモートされ、49、+ 1=>50になります。

数字以外のすべての文字を同じ方法で追加できることに注意してください。

'a' + 0 = 97
'A' + 0 = 65
' ' + 0 = 32
于 2012-04-27T22:22:51.827 に答える
0

'char'は、実際には2バイトの符号なし整数です。

'1'1は大きく異なります。'1'2バイト値49としてエンコードされます。

「文字エンコード」はあなたが研究したいトピックです。または、Java言語仕様から:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1

于 2012-04-27T22:25:31.263 に答える