java重载类型自动转换学习

       最近在看java编程思想,准备系统的巩固一下基础知识。

       对于重载时候基本类型的转换,以前没有很注意到,现在记录一下,增加些印象

       对于在重载过程中,基本数据类型能从一个“较小“的类型自动提升至一个“较大”的类型。但是如果传入的实际参数大于重载方法声明的形式参数,必须通过类型转换执行窄化转换,否则编译器会报错

由小到大自动转换:

public class PrimitiveOverloading {
    void f1(char x ) {System.out.print("f1(char )"); }
    void f1(byte x ) {System.out.print("f1(byte )");}
    void f1(short x ) {System.out.print("f1(short )");}
    void f1(int x ) {System.out.print("f1(int )");}
    void f1(long x ) {System.out.print("f1(long )");}
    void f1(float x ) {System.out.print("f1(float )");}
    void f1(double x ) {System.out.print("f1(double )");}

    void f2(byte x ) {System.out.print("f2(byte )");}
    void f2(short x ) {System.out.print("f2(short )");}
    void f2(int x ) {System.out.print("f2(int )");}
    void f2(long x ) {System.out.print("f2(long )");}
    void f2(float x ) {System.out.print("f2(float )");}
    void f2(double x ) {System.out.print("f2(double )");}


    void f3(short x ) {System.out.print("f3(short )");}
    void f3(int x ) {System.out.print("f3(int )");}
    void f3(long x ) {System.out.print("f3(long )");}
    void f3(float x ) {System.out.print("f3(float )");}
    void f3(double x ) {System.out.print("f3(double )");}


    void f4(int x ) {System.out.print("f4(int )");}
    void f4(long x ) {System.out.print("f4(long )");}
    void f4(float x ) {System.out.print("f4(float )");}
    void f4(double x ) {System.out.print("f4(double )");}

    void f5(long x ) {System.out.print("f5(long )");}
    void f5(float x ) {System.out.print("f5(float )");}
    void f5(double x ) {System.out.print("f5(double )");}

    void f6(float x ) {System.out.print("f6(float )");}
    void f6(double x ) {System.out.print("f6(double )");}

    void f7(double x ) {System.out.println("f7(double )");}

    void testChar(){
        char x ='x';
        System.out.print("char: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testByty(){
        byte x = 0;
        System.out.print("byte: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testShort(){
        Short x = 0;
        System.out.print("Short: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testInt(){
        int x = 0;
        System.out.print("int: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testLong(){
        long x = 0l;
        System.out.print("long: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testFloat(){
        float x = 0;
        System.out.print("char: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testDouble(){
        double x = 0;
        System.out.print("double: ");
        f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }


    public static void main(String[] args) {
        PrimitiveOverloading p = new PrimitiveOverloading();
        p.testChar();
        p.testByty();
        p.testShort();
        p.testInt();
        p.testLong();
        p.testFloat();
        p.testDouble();
    }

}

char: f1(char )f2(int )f3(int )f4(int )f5(long )f6(float )f7(double )
byte: f1(byte )f2(byte )f3(short )f4(int )f5(long )f6(float )f7(double )
Short: f1(short )f2(short )f3(short )f4(int )f5(long )f6(float )f7(double )
int: f1(int )f2(int )f3(int )f4(int )f5(long )f6(float )f7(double )
long: f1(long )f2(long )f3(long )f4(long )f5(long )f6(float )f7(double )
char: f1(float )f2(float )f3(float )f4(float )f5(float )f6(float )f7(double )
double: f1(double )f2(double )f3(double )f4(double )f5(double )f6(double )f7(double )

Process finished with exit code 0
        通过结果可以证实,如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会别提升。
char类型略有不同,如果无法找到恰好接受char参数的方法,就会吧char直接提升到int型

     由大到小转换必须执行窄化转换

public class Demotion {
    void f1(char x ) {System.out.print("f1(char )"); }
    void f1(byte x ) {System.out.print("f1(byte )");}
    void f1(short x ) {System.out.print("f1(short )");}
    void f1(int x ) {System.out.print("f1(int )");}
    void f1(long x ) {System.out.print("f1(long )");}
    void f1(float x ) {System.out.print("f1(float )");}
    void f1(double x ) {System.out.print("f1(double )");}

    void f2(char x ) {System.out.print("f2(char )"); }
    void f2(byte x ) {System.out.print("f2(byte )");}
    void f2(short x ) {System.out.print("f2(short )");}
    void f2(int x ) {System.out.print("f2(int )");}
    void f2(long x ) {System.out.print("f2(long )");}
    void f2(float x ) {System.out.print("f2(float )");}

    void f3(char x ) {System.out.print("f3(char )"); }
    void f3(byte x ) {System.out.print("f3(byte )");}
    void f3(short x ) {System.out.print("f3(short )");}
    void f3(int x ) {System.out.print("f3(int )");}
    void f3(long x ) {System.out.print("f3(long )");}

    void f4(char x ) {System.out.print("f4(char )"); }
    void f4(byte x ) {System.out.print("f4(byte )");}
    void f4(short x ) {System.out.print("f4(short )");}
    void f4(int x ) {System.out.print("f4(int )");}

    void f5(char x ) {System.out.print("f5(char )"); }
    void f5(byte x ) {System.out.print("f5(byte )");}
    void f5(short x ) {System.out.print("f5(short )");}

    void f6(char x ) {System.out.print("f6(char )"); }
    void f6(byte x ) {System.out.print("f6(byte )");}

    void f7(char x ) {System.out.print("f7(char )"); }

    void testDouble(){
        double x = 0;
        System.out.print("double: ");
        f1(x);f2((float)x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
    }

    public static void main(String[] args) {
        Demotion d = new Demotion();
        d.testDouble();
    }
 }


double: f1(double )f2(float )f3(long )f4(int )f5(short )f6(byte )f7(char )
Process finished with exit code 0



   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值