(本文来自于Thinking in java 加入了楼主自己的思考,未必正确)
3.7
1.当方法重载遇上基本类型
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形有点特殊,无法找到的话,会被提升为int