基本类型能从一个较小的类型自动提升至一个较大的类型,此过程一旦牵涉重载,
可能会造成一些混淆。
package example; public class Test { /** * 测试涉及基本类型的重载 */ public static void main(String[] args) { System.out.print("char类型重载:"); char x='x'; f1(x);f2(x);f3(x); System.out.print("byte类型重载:"); byte y=0; f1(y);f2(y);f3(y); System.out.print("short类型重载:"); short z=0; f1(z);f2(z);f3(z);f4(z); } public static void f1(char x){System.out.print("f1(char)");}; public static void f1(byte x){System.out.print("f1(byte)");}; public static void f1(short x){System.out.print("f1(short)");}; public static void f1(int x){System.out.print("f1(int)");}; public static void f1(long x){System.out.print("f1(long)");}; public static void f1(float x){System.out.print("f1(float)");}; public static void f1(double x){System.out.print("f1(double)");}; public static void f2(short x){System.out.print("f2(short)");}; public static void f2(int x){System.out.print("f2(int)");}; public static void f2(long x){System.out.print("f2(long)");}; public static void f2(float x){System.out.print("f2(float)");}; public static void f2(double x){System.out.print("f2(double)");}; public static void f3(int x){System.out.print("f3(int)");}; public static void f3(long x){System.out.print("f3(long)");}; public static void f3(float x){System.out.print("f3(float)");}; public static void f3(double x){System.out.print("f3(double)");}; public static void f4(long x){System.out.print("f4(long)");}; }
输出:char类型重载:f1(char)f2(int)f3(int)byte类型重载:f1(byte)f2(short)f3(int)short类型重载:f1(short)f2(short)f3(int)f4(long)
结论:如果传入的数据类型小于方法中声明的形参类型,实际数据就会被提升。
char类型有所不同,如果无法恰好找到char参数的方法,但是int参数方法存在时,
char直接提升至int型。
反过来,如果传入的实际参数大,而形式参数类型小,则需要通过强制类型转换(窄化转化),
不能指望类型自动下降,否则编译器报错。