有两种方法都是重载方法
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)
将调用哪种方法?
int add(int a, int b)将被调用,因为3和4类型都是int,所以编译器更喜欢不需要拓宽投方法.由于存在具有与参数匹配的参数类型的方法,因此选择它.
如果至少有一个参数是类型long,
int add(long a, long b)
Run Code Online (Sandbox Code Playgroud)
将代替被选择,因为从铸造long到int需要被明确地完成.
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)