今天我在群里看到有人问,为什么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位有符号整数!他们的范围不一致,所以才不能自动转换。
这是计算机组成原理一个很基础的知识,但是我却给忽略了,实在惭愧。
遇到问题还是得剖析本质啊,我写下这篇博客来提醒自己。
网友评论