本质的区别是带
short符号的
char是无符号的。
public class CharVsShort { public static void main(String[] args) throws Exception { short ffShort = (short)0xFFFF; char ffChar = (char)0xFFFF; System.out.println("all-1s-short = " + (int)ffShort); System.out.println("all-1s-char = " + (int)ffChar); }}版画
all-1s-short = -1all-1s-char = 65535
在Java语言规范第4.2节规定,
积分类型是
byte,short,int,和long其值是8位,16位,32位和64位的 签名
二进制补码整数,分别和char,其值是16位 无符号 整数表示UTF-16码单位
(我的粗体)。它还将类型的范围明确指定为
byte
,从-128到127(含)short
,从-32768到32767(含)int
,从-2147483648到2147483647(含)long
,从-9223372036854775808到9223372036854775807(含)char
,从’ u0000’到’ uffff’(包括0和65535)



