java中字符的范围

java中字符的范围,java,Java,以下Java代码行产生错误。 即使java中的数据类型是有符号的 char c = -128; Char是一种未在java中签名的数据类型。这是一个16位无符号整数。直接来自Oracle教程 char:char数据类型是单个16位Unicode字符。它的最小值为 '\u0000'(或0)和最大值'\uffff'(或65535) 它的最小值为'\u0000'(或0),最大值为'\uffff'(或包含65535) 这是因为-128是int。您需要强制转换为char。请注意char是无符

以下Java代码行产生错误。
即使java中的数据类型是有符号的

    char c = -128;  

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

直接来自Oracle教程

char
char
数据类型是单个16位Unicode字符。它的最小值为
'\u0000'
(或0)和最大值
'\uffff'
(或65535)


它的最小值为
'\u0000'(或0)
,最大值为
'\uffff'(或包含65535)


这是因为-128是int。您需要强制转换为char。请注意char是无符号类型,因此

   char c = (char) -1;
    System.out.print(Integer.valueOf(c).toString());
你会得到 65535

投下它:

char c = (char) -128;  

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

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


char包含16位无符号值。我们可以为char分配整数,但从0开始,正数高达2会增加到16的幂,即65536-1

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

char:char数据类型是单个16位Unicode字符。它有 最小值'\u0000'(或0)和最大值'\uffff'(或 包括65535人)

因此,您不能真正将负值赋给
char
,而
char c=-128
将导致错误。
当您尝试将负值指定给char并键入cast时,它将通过另一端(max)旋转该值


您还可以使用
character.isValidCodePoint(int codePoint)
方法检查int值作为字符代码是否有效:

boolean isValid=Character.isValidCodePoint(-128);//假的

此外,字符表示字符。负值字符的含义是什么?布尔值是有符号的数据类型吗?@JaynathanLeung请详细说明。是假阴性还是真阳性?在这个方案中,零在哪里?布尔值是1位。表示真或假的1或0。我看到您已将注释从是更改为否。您的意思是-1或0。它是2的补码位。但是,在java中,布尔值只能是“真”或“假”。它可能在字节码中实现为有符号8位整数,但它的定义并不明确。所以这真的不值得费心。
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.