Short和Character除了处理之外有什么区别?

fge*_*fge 7 java

据我所知:

  • "逐字",看起来它们是相同的(它们都是2个字节长);
  • Character但是,它有更多的处理(静态.isLetter()方法和其他等).

虽然我的问题可能听起来很愚蠢,但它们是:

  • 除非我的第一个假设是错误的,为什么有原始类型char,short因为它们具有相同的"内部长度",无论如何,Java中没有无符号的原始类型?
  • Shortfinal,如果不是,可以Character延长Short

编辑:答案给我错了:有在Java中一个未签名的原始类型,这是... char.

编辑2:@PatriciaShanahan还提到在算术运算中,char行为类似于无符号16位整数,就像a short.这包括左移,即,符号位一起携带,就像对short.

Ian*_*rts 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

版画

all-1s-short = -1
all-1s-char  = 65535
Run Code Online (Sandbox Code Playgroud)

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

  • +1`cha的范围从0到65535,而`short`s范围从-32768到-32767. (3认同)
  • +1 用于将“char”正确识别为无符号基元类型。@fge 这里错了。 (2认同)
  • 我不知道它来自哪里,但我知道在哪里指出它们证明它是不对的.:) [JLS 4.2](http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1):`整数类型[include] char,其值是表示UTF-16代码单元的16位无符号整数 (2认同)