美文网首页
为什么char不能自动转为short

为什么char不能自动转为short

作者: Ramsey16k | 来源:发表于2019-11-08 00:47 被阅读0次

    今天我在群里看到有人问,为什么Java中char类型不能自动转成short类型。

    一开始我想的是: byte, short, char 三个是同级别的,所以不能自动转换。
    因为数值类型的级别从低到高是:byte, short, char -> int -> long -> float -> double

    但后来我自己在IDEA跑了一下发现,byte可以自动转成short,但byte不能自动转char,char不能自动转short,突然有些懵逼。
    报错如下:


    image.png

    于是我看了一下他们的取值范围:

    System.out.println(Byte.MIN_VALUE + " " + Byte.MAX_VALUE);
    System.out.println(Character.MIN_VALUE + " " + Character.MAX_VALUE);
    System.out.println(Short.MIN_VALUE + " " + Short.MAX_VALUE);
    

    运行结果:


    image.png

    可以看到,Byte类型的取值范围是 -128 ~ 127,Short类型的取值范围是 -32768 ~ 32767,而Character的范围无法在控制台打印。

    这好说,把它转成int就行了:

    System.out.println((Character.MIN_VALUE + 1) + " " + (Character.MAX_VALUE + 1));
    

    运行结果:


    image.png

    这下可以看出,Character的取值范围是 0 ~ 65535,真相大白!
    我们知道,byte占1个字节,char和short都占2个字节。但是,char是16位无符号整数,而short是16位有符号整数!他们的范围不一致,所以才不能自动转换。

    这是计算机组成原理一个很基础的知识,但是我却给忽略了,实在惭愧。
    遇到问题还是得剖析本质啊,我写下这篇博客来提醒自己。

    相关文章

      网友评论

          本文标题:为什么char不能自动转为short

          本文链接:https://www.haomeiwen.com/subject/audgbctx.html