java中的char范围

以下Java代码行产生错误。
即使java中的数据类型已签名?

char c = -128; 

Char是未在java中签名的一种数据类型。 它是一个16位无符号整数。

直接来自Java数据类型的Oracle教程。

charchar数据类型是一个16位Unicode字符。 它的最小值为'\u0000' (或0),最大值为'\uffff' (或65,535(含))。

这是因为-128是int。 你需要转换为char。 请注意,char是无符号类型,所以之后

  char c = (char) -1; System.out.print(Integer.valueOf(c).toString()); 

你会得到65535

它的最小值为'\u0000' (or 0) ,最大值为'\uffff' (or 65,535 inclusive)

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

施展它:

 char c = (char) -128; 

虽然这可能不会像你期望的那样。 也许一个字节会更好?

如果您发现自己对基元的最小值或最大值感到困惑,请找到它们的等效对象并查找MIN_VALUE或MAX_VALUE常量。 例如:

http://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#MIN_VALUE

char保持16位无符号值。我们可以将整数分配给char,但是当从0开始时,正向上2将上升到功率16,即65536-1。

如果我们需要分配-ve值,那么某些位将会松散,我们将需要进行类型转换。在这种情况下,编译器会将符号位与实际值一起存储,最后的位将被丢弃。 char c =(char)-128不会给出编译错误,但是你会得到荒谬的结果

根据Oracle Java doc

char:char数据类型是一个16位Unicode字符。 它的最小值为’\ u0000’(或0),最大值为’\ uffff’(或65,535(含))。

因此,您无法真正为char指定负值,而char c = -128将导致错误。
当您尝试将负值分配给char并对其进行类型转换时,它将通过另一个(最大)端旋转该值。

 char c; c = (char) 65; // 'A' c = (char) -100; // 'ワ' and it results in 65,535(inclusive) - 100 = (char) 65,436 c = (char) 65436; // 'ワ' int i; i = (char) 65; // 65 i = (char) -1; // 65535 : notice how the char value cycles through the other end i = (char) -100; // 65436 : same as (char) -100. Here, int returns 65,436.