重载中的数字类型

Raj*_*iya 2 java

有两种方法都是重载方法

int add(int a, int b)
Run Code Online (Sandbox Code Playgroud)

int add(long a, long b)
Run Code Online (Sandbox Code Playgroud)

如果我打电话

add(3,4)
Run Code Online (Sandbox Code Playgroud)

将调用哪种方法?

fab*_*ian 6

int add(int a, int b)将被调用,因为34类型都是int,所以编译器更喜欢不需要拓宽投方法.由于存在具有与参数匹配的参数类型的方法,因此选择它.

如果至少有一个参数是类型long,

int add(long a, long b)
Run Code Online (Sandbox Code Playgroud)

将代替被选择,因为从铸造longint需要被明确地完成.

add(3, 4L); // calls add(long, long)
add(3, (int) 4L); // calls add(int, int) (explicit cast long -> int)
Run Code Online (Sandbox Code Playgroud)

通常,您可以选择在这种情况下使用最多位的参数类型,并根据此信息选择方法:

如果是long,那么add(long, long)将被调用.否则add(int, int)使用.

以下呼叫使用 add(int, int)

add('a', 'b'); // most bits: char (assignable to int)
add((short)1, (byte)2);  // most bits: short (assignable to int)
Run Code Online (Sandbox Code Playgroud)

以下调用使用 add(long, long)

add('a', (long)'b'); // most bits: long (not assignable to int)
add((long)1, (byte)2); // most bits: long (not assignable to int)
Run Code Online (Sandbox Code Playgroud)