内部作業のように、「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と呼ばれる機能があり、いくつかのプリミティブ型が適切なときにオブジェクトにキャストされます (たとえば、 intto Integer、booleanto Boolean) が、 では機能しませんchar。charに自動ボックス化されCharacterます。
渡すと、 ;'c'と見なされます。charを渡そうとする"c"と、 とみなされますstring。
'c' は文字列ではなく char 型です。'c' は (int)'c' と比較される場合があります