面试题 请选择输出的结果是什么? ( )
A. byte B.char C.short D.long E.double
public class Demo {
public static void main(String[] args) {
Demo b=new Demo();
b.sout(127);
}
void sout(byte c){
System.out.println("int");
}
void sout(char c){
System.out.println("char");
}
void sout(short c){
System.out.println("short");
}
void sout(int c){
System.out.println("short");
}
void sout(long c){
System.out.println("long");
}
void sout(double c){
System.out.println("long");
}
}
答案是long
此题如上,涉及知识点如下:
重载:同一类中,方法名相同,参数类型、个数、顺序不同的方法,称之为方法的重载,方法的重载与方法的返回值、修饰符,参数名称无关;
字面量值得类型:
整数型为int 浮点型为double
类型转换:
自动类型转化:数据类型范围小的变量或数据会自动转换为数据类型范围大类型
自动类型转换的依次顺序
强制类型转换:数据类型范围大的变量或数据可以转换为数据范围类型小的类型,
格式: 类型范围小的变量 = (转换类型) 类型范围大的数据或变量
int i=5;
long l=5;
l=i;
上面的大家基本都能理解,另外一点需要注意的是int类型字面量可以在类型范围内赋值给char byte short
byte =5 //-128-127
short =5 // -32768~32767
char =5 //0-65535
值传递
调用方法传递参数时,如果参数是基本类型,则传递的是基本类型的值,如果参数类型是引用类型,则参数传递的是对象的地址值
现在回看面试题,
解题思路:
方法调用时传递的参数是int类型值为127
查找参数为int类型的方法
没有,查看参数取值类型范围 byte short long double 都满足
是到底是直接赋值给char short还是自动转型到long doudle?
其实参数传递进方法时,类型已经确定为int 类型,
由于没有int类型参数的方法,参数值发生自动类型转换,
int 转为long,如果没有long者转化为float ,先后依次顺序看上面的自动类型转换的依次顺序图
也可以在IDEA中粘贴以上代码进行测试.依次将int类型参数注释掉,查看运行结果,
或者断点调试,查看程序执行顺序;