java中的字符范围

kcrjzv8t  于 2023-01-19  发布在  Java
关注(0)|答案(9)|浏览(93)

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

char c = -128;
2ledvvac

2ledvvac1#

Char是java中唯一没有符号的数据类型,它是一个16位无符号整数。

pes8fvy9

pes8fvy92#

直接来自Java datatypes.的Oracle教程
charchar数据类型是单个16位Unicode字符。它的最小值为'\u0000'(或0),最大值为'\uffff'(或65,535,含65,535)。

neekobn8

neekobn83#

这是因为-128是int.你需要到强制转换到char.请注意这char是unsigned类型,所以在

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

您将获得65535

hc8w905p

hc8w905p4#

它的最小值为'\u0000' (or 0),最大值为'\uffff' (or 65,535 inclusive)
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

6jygbczu

6jygbczu5#

根据Oracle Java doc
char:char数据类型是单个16位Unicode字符。它的最小值为“\u0000”(或0),最大值为“\uffff”(或65,535,含65,535)。
因此,您不能真正将负值赋给charchar c = -128将导致错误。
当你试图给一个字符赋负值并对其进行类型转换时,它会将该值旋转到另一端(最大值)。

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.
r6vfmomb

r6vfmomb6#

投吧:

char c = (char) -128;

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

kwvwclae

kwvwclae7#

如果你发现你自己对基元的最小值或最大值感到困惑,找到它们的等价对象并寻找MIN_VALUE或MAX_VALUE常量。
http://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#MIN_VALUE

zd287kbt

zd287kbt8#

char保存16位无符号值。我们可以给char赋值integer,但是2的16次方等于65536-1,从0开始。
如果我们需要给-ve赋值,那么一些位将是松散的,我们将需要类型转换。在这种情况下,编译器将把符号位与实际值沿着存储,最后的位将被丢弃。char c=(char)-128不会给予编译错误,但您将得到荒谬的结果

zf2sa74q

zf2sa74q9#

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

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

相关问题