java自动向上转型问题

java中各个类型所占字节为:

byte:           8bit        -128~127
char:           16bit
short:          16bit
int32bit
float:          32bit
double :        64bit
long:           64bit   

关于boolean类型具体在java中占用多少字节

  1. JAVA规范没有明确指出boolean占几个字节
  2. JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理。
  3. JVM以计算机的字长作为最小处理单位。

java自动向上转型是按照

char->int -> long -> float -> double的顺序

在基本类型进行算术运算的时候,会发生小字节类型向大字节类型转换的现象。但是char、byte、short例外。

char、byte、short是同级,他们之间相互转型的话是不安全的。因为编译器在运行时会首先将这三者先扩充转为int类型,然后继续进行计算。

如下程序:

short a=1,b=2;
short c =a+b;

提示错误type mismatch: cannot convert from int to short,即a+b计算时转为int类型,int类型无法向下自动转型为short

但是当a、b为final时程序正常,因为final类型为常量,在编译阶段直接就赋值给c了,不会经过计算转型。

final short a=1,b=2;
short c =a+b;

当自动转型结合重载

public class Main2 {
    private void f(byte a) {
        System.out.println("byte:"+a);
    }
    private void f(char a) {
        System.out.println("char:"+a);
    }
    private void f(Character a) {
        System.out.println("Character:"+a);
    }
    private void f(Serializable a) {
        System.out.println("Serializable:"+a);
    }
    private void f(Object a) {
        System.out.println("Object:"+a);
    }
    private void f(short a) {
        System.out.println("short:"+a);
    }
    private void f(int a) {
        System.out.println("int:"+a);
    }
    private void f(float a) {
        System.out.println("float:"+a);
    }
    private void f(long a) {
        System.out.println("long:"+a);
    }
    private void f(double a) {
        System.out.println("double:"+a);
    }
    private void f(char ... a ) {
        System.out.println("char ... :"+a[0]);
    }

    public static void main(String[] args) {
        Main2 m = new Main2();
        m.f('a');
    }
}

上述重载方法的调用优先级为
char->int -> long -> float -> double -> Character -> Serializable -> Object -> char …

输出为char:a当注释掉void f(char a)函数时,输出int:97,即char向上转型为int,依照向上转型的顺序,char->int -> long -> float -> double的顺序,优先调用重载的相应方法,没有时继续向上转型,最后调用变长参数的重载方法,可见变长参数的重载优先级最低。

注意:这里char可以自动装箱为Character 对象,但是不能自动装箱为Integer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值