涉及基本类型的重载

基本类型能从一个较小的类型自动提升至一个较大的类型,此过程一旦牵涉重载,

可能会造成一些混淆。

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型。

反过来,如果传入的实际参数大,而形式参数类型小,则需要通过强制类型转换(窄化转化),

不能指望类型自动下降,否则编译器报错。

原文地址:https://www.cnblogs.com/xurui1995/p/5204261.html