为什么char不能自动转为short

今天我在群里看到有人问,为什么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位有符号整数!他们的范围不一致,所以才不能自动转换。

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

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值