class Test {
void m1(byte b) {
System.out.print("byte");
}
void m1(short s) {
System.out.print("short");
}
void m1(int i) {
System.out.print("int");
}
void m1(long l) {
System.out.print("long");
}
public static void main(String [] args) {
Test test = new Test();
test.m1(2);
}
}
输出为:int。为什么jvm会考虑使用int参数的方法?
答案 0 :(得分:9)
因为整数文字在Java中的类型为int
。如果你想打电话给其他人,你需要一个明确的演员表。 (如果要调用L
版本,请添加long
后缀。)
有关详细信息,请参阅JLS Lexical Structure§3.10.1整数文字。
答案 1 :(得分:4)
Data Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false
因此,您需要明确地将数字作为参数提供给您想要的适当基元类型
如果您尝试提供
public static void main(String [] args) {
Test test = new Test();
test.m1(2L);
}
输出将为long
如果是short
或byte
(隐式为int
),则需要对该类型进行强制转换
public static void main(String [] args) {
Test test = new Test();
test.m1((short)2);
}