据我所知:
Character
有更多处理(静态.isLetter()
方法等)。虽然我的问题可能听起来很愚蠢,但它们是:
char
和short
,因为它们具有相同的“内部长度”,无论如何,Java中没有无符号的基元类型?Short
是final
,如果不是,可以Character
延长Short
? 编辑:给出答案,我错了: 是Java中的一个无符号基元类型,它是...... char
。
编辑2 :@ PatriciaShanahan还提到在算术操作中,char
的行为类似于无符号16位整数,就像short
一样。这包括左移,即符号位 ,就像short
一样。
答案 0 :(得分:20)
本质区别在于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 = -1
all-1s-char = 65535
Java Language Specification section 4.2表示
整数类型为
byte
,short
,int
和long
,其值为8位,16位,32位和64位分别为签名二进制补码整数和char
,其值为16位无符号整数,代表UTF-16代码单元
(我的大胆)。它还将类型的范围明确地表示为
byte
,从-128到127,包括short
,从-32768到32767,包括int
,从-2147483648到2147483647,包括long
,from -9223372036854775808 to 9223372036854775807,included {/ li>
char
,从'\ u0000'到'\ uffff',包括0到65535 答案 1 :(得分:3)
它们目前不兼容,永远不会改变。但是为了猜测为什么它们最初不同 - 对于数字数据和字母来说,它们可能是一个非常好的想法,即使它们的内容工作方式完全相同,只是为了避免混淆他们。那将是坏。
答案 2 :(得分:0)
关于 short 和 char 的已知事实:
在没有显式转换的情况下,char 原始变量永远不能分配给 short。
一个简短的原始变量永远不能在没有显式转换的情况下分配给一个字符。
char c = 'c';
short s = c; // will cause a compiler error
short sh = 10;
char ch = sh; // will also cause a compiler error
一个简短的常量,即用关键字 final 定义的,只有当值适合一个字符 (0 - 65535) 时才能分配给一个字符,反之亦然。 对于 item1 和 item2 中的示例。下面修复了错误。
final char c = 'c';
short s = c; // compiles without any issues.
final short sh = 10;
char ch = sh; // compiles without any issues.
但是,下面失败了,因为 char 是无符号的,即只能处理正文字。
final short sh = -1;
char ch = sh; // compiler error is thrown
要修复错误,需要一个明确的案例。
final short sh = -1;
char ch = (char)sh; // compiler error is thrown