内部作業のように、「int」が出力されるのはなぜですか。
class Test {
void Method(int i) {
System.out.println("int");
}
void Method(String n) {
System.out.println("string");
}
public static void main(String [] a) {
new Test().Method('c');
}
}
内部作業のように、「int」が出力されるのはなぜですか。
class Test {
void Method(int i) {
System.out.println("int");
}
void Method(String n) {
System.out.println("string");
}
public static void main(String [] a) {
new Test().Method('c');
}
}
キャラクターc
は にキャストされていint
ます。にキャストされることはありませんString
。
より正式には、JLS §5.5から- a から 、 、 、または への拡大変換char
がint
行わlong
れfloat
ますdouble
。
が として表示されない理由String
は、 をchar
に自動ボックス化できないためString
です。
一重引用符で変数を渡すと、char
. 文字はint
変数に変換されます。
String
単に二重引用符として渡したい場合は、二重引用符を使用します。
new Test().Method("c");
プリミティブ型の特定の変換は、拡張プリミティブ変換と呼ばれます。
byte から short、int、long、float、または double
short から int、long、float、または double
char から int、long、float、または double
int から long、float、または double
フロートまたはダブルまで長い
float から double
詳細はこちら: JLS §5.1.2
'c'
一重引用符による文字です。プリミティブな数値 (やや) 型であるため、後者は明示的でなければならないため、文字列よりも簡単に整数にキャストされます。
Method(int i)
印刷に変更してi
、別の文字を試すこともできます。
はchar
実際には の数値型ですJava
。コールバックを作成すると、自動的に に変換されint
ます。そのため、メソッドは を出力しint
ます。
Oracle のチュートリアルから、次のことがわかります。
char データ型は、単一の 16 ビット Unicode 文字です。最小値は '\u0000' (または 0) で、最大値は '\uffff' (または 65,535 を含む) です。
Java では、文字は数字として表されます。具体的には、Java は Unicode コードポイントによって文字を表します。私が間違っていなければ、文字 'c' は Unicode 仕様の 98 番です。
を呼び出すときMethod('c')
、プログラムには 2 つのメソッド シグネチャ オプションint
がありString
ます。'c' は本質的に数字であるため、98 にキャストint
され、数字 98 として扱われます。文字は にキャストされませんStrings
。
char
はプリミティブ型で、 にキャストされますがint
、String
はオブジェクトです。
一方、Java にはautoboxingと呼ばれる機能があり、いくつかのプリミティブ型が適切なときにオブジェクトにキャストされます (たとえば、 int
to Integer
、boolean
to Boolean
) が、 では機能しませんchar
。char
に自動ボックス化されCharacter
ます。
渡すと、 ;'c'
と見なされます。char
を渡そうとする"c"
と、 とみなされますstring
。
'c' は文字列ではなく char 型です。'c' は (int)'c' と比較される場合があります