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

你可能感兴趣的:(java)