1

私はSCJP6学習ガイドに頭を悩ませていますが、彼らがここで指摘している点について混乱しています。

intをcharにキャストすることに関して、彼らは次のことは完全に合法であると言いますが、精度が失われます(私は完全に理解できます):

    char d = (char)-98;
    char c = (char)70000;
    System.out.println("d = " + d + " c = " + c);

この結果は次のとおりです。

d = ? c = ?

ここで私が混乱しているのは、どちらの場合も、結果のchar値が単なる疑問符として出力されているということです。私は無意味な数値を期待していました。おそらく元の値とはほとんどまたはまったく関係がありませんが、それでも数値です。

結果が疑問符であるのはなぜですか?ここで疑問符だけが「精度の低下」であることがわかりませんか?

私はここSOで多くのchar関連の質問を見て、またたくさんグーグルで検索しましたが、これに対する答えを見つけることができません。

他のJVMとは異なりますか?それとも、範囲外のすべての文字キャストに対する標準的な応答ですか?

4

4 に答える 4

3

文字列にcharを追加すると、数値(97など)ではなく、charが追加されます(たとえば、「a」)。charの数値を知りたい場合は、

System.out.println("d = " + ((int) d) + " c = " + ((int) c));
于 2012-11-04T17:50:55.697 に答える
3

これらの文字をintにキャストして戻すと、それぞれ値が65438と4464であることがわかります。これらは、Unicode文字U + FF9E HALFWIDTH KATAKANA VOICEDSOUNDMARKおよびU+1170 HANGULJUNGSEONGWEに対応します。システムにはこれらの文字のグリフを提供するフォントがないため、文字として印刷すると疑問符が表示されます。

于 2012-11-04T17:51:19.143 に答える
1

文字は実際にはとですff9e1170それらはであるように見えるはずです

ここに画像の説明を入力してください ここに画像の説明を入力してください

システムがそれらを表示できないというだけです。

http://www.fileformat.info/info/unicode/char/ff9e/index.htm

http://www.fileformat.info/info/unicode/char/1170/index.htm

于 2012-11-04T17:50:11.550 に答える
0
System.out.println((char)65);

プリントアウト

A

したがって、損失精度でのキャストは疑問符ではなく、キャストが適用された後にcharに変換された値のchar表現です。

于 2012-11-04T17:51:37.650 に答える