Java 除了处理外,短字符和字符有什么区别?
据我所知:Java 除了处理外,短字符和字符有什么区别?,java,Java,据我所知: “bytewise”,看起来它们是一样的(它们都有2个字节长) 然而,字符对它有更多的处理(static.isleter()方法和其他方法,等等) 虽然我的问题听起来很愚蠢,但它们是: 除非我的第一个假设是错误的,为什么会有原语类型char和short,因为它们具有相同的“内部长度”,而且Java中没有无符号的原语类型 Short是final,如果不是,字符是否可以扩展Short EDIT:给出了答案,但我错了:Java中有一个未签名的基元类型,那就是……char 编辑2:@
- “bytewise”,看起来它们是一样的(它们都有2个字节长)李>
- 然而,
对它有更多的处理(static字符
方法和其他方法,等等).isleter()
- 除非我的第一个假设是错误的,为什么会有原语类型
和char
,因为它们具有相同的“内部长度”,而且Java中没有无符号的原语类型short
是Short
,如果不是,字符final
是否可以扩展
Short
char
编辑2:@PatriciaShanahan还提到,在算术运算中,
char
的行为类似于无符号16位整数,就像short
。这包括左移,也就是说,符号位被携带,就像short一样,它们当前是不兼容的,而且永远不会兼容改变了。但是为了猜测它们最初的不同之处——对于数字数据和字母使用不同的类型可能是一个非常好的主意,即使它们的内容工作方式完全相同,只是为了避免混淆。那将是很糟糕的。本质的区别是short
是有符号的,char
是u未签名
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
国家
整数类型有字节
、短
、整数
和长
,其值分别为8位、16位、32位和64位有符号两位补整数和字符
,其值为16位无符号整数,表示UTF-16码单元
(我的粗体)。它还明确给出了类型的范围
字节
,从-128到127,包括
short
,从-32768到32767,包括
int
,从-2147483648到2147483647,包括在内
long
,从-9223372036854775808到9223372036854775807,包括
char
,从'\u0000'到'\uffff'包括在内,即从0到65535
关于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
在没有显式强制转换的情况下,不能将短基元变量指定给char
char c = 'c';
short s = c; // will cause a compiler error
short sh = 10;
char ch = sh; // will also cause a compiler error
只有当值适合字符(0-65535)时,才可以将用关键字final定义的短常量分配给字符,反之亦然。
对于第1项和第2项中的示例,下面修复了错误
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
这可能会有一些启示:对于无符号原语,您也忘记了boolean
@MarkoTopolnik不太清楚,boolean
在Java中根本不是数字类型(它不能转换为任何数字类型,反之亦然),因此符号/无符号的区别不适用。char表示两个字符中的任何一个(不仅仅是信件)或数字,具体取决于它的使用方式。作为算术表达式中的操作数,它是一个无符号16位整数。@PatriciaShanahan有趣的观察!嗯,不。Java中没有无符号基元类型。除非你的意思是什么?+1用于将char
正确识别为无符号基元类型。@fge是wro这里是ng。+1char
s的范围从0到65535,而short
s的范围从-32768到-32767。我见过“无无符号基元类型”的概念“最近在Java中有好几次,尽管有明显的反例char。也许@fge可以澄清它来自何处。我不知道它来自何处,但我知道向他们指出它不正确的地方。:整数类型[include]char,其值是表示UTF-16代码单位的16位无符号整数。
奇怪的是,(我已经测试过了,评论者是对的),@PatriciaShanahan提到在算术运算中,char
的行为基本上类似于short
。char
在内部有多特殊?一点也不特殊,因为short
和char
上的算术实际上都是int
算术。它只是在内部将它们都提升到int
。好吧,那么处理方法真的取决于JVM,除了算术运算?我的意思是,字符
对显示等有特殊的规则,但将其留给JVM核心来进行算术运算?当然char
是一种基本类型,Character
与所有包装类型一样,只是围绕其相应的基本类型的一个非常非常简单的包装。