根据Oracle Java doc char:char数据类型是单个16位Unicode字符。它的最小值为“\u0000”(或0),最大值为“\uffff”(或65,535,含65,535)。 因此,您不能真正将负值赋给char,char 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.
9条答案
按热度按时间2ledvvac1#
Char是java中唯一没有符号的数据类型,它是一个16位无符号整数。
pes8fvy92#
直接来自Java datatypes.的Oracle教程
char
:char
数据类型是单个16位Unicode字符。它的最小值为'\u0000'
(或0),最大值为'\uffff'
(或65,535,含65,535)。neekobn83#
这是因为-128是int.你需要到强制转换到char.请注意这char是unsigned类型,所以在
您将获得65535
hc8w905p4#
它的最小值为
'\u0000' (or 0)
,最大值为'\uffff' (or 65,535 inclusive)
。http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
6jygbczu5#
根据Oracle Java doc
char:char数据类型是单个16位Unicode字符。它的最小值为“\u0000”(或0),最大值为“\uffff”(或65,535,含65,535)。
因此,您不能真正将负值赋给
char
,char c = -128
将导致错误。当你试图给一个字符赋负值并对其进行类型转换时,它会将该值旋转到另一端(最大值)。
r6vfmomb6#
投吧:
虽然这可能不会像你期望的那样,也许一个字节会更好?
kwvwclae7#
如果你发现你自己对基元的最小值或最大值感到困惑,找到它们的等价对象并寻找MIN_VALUE或MAX_VALUE常量。
http://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#MIN_VALUE
zd287kbt8#
char保存16位无符号值。我们可以给char赋值integer,但是2的16次方等于65536-1,从0开始。
如果我们需要给-ve赋值,那么一些位将是松散的,我们将需要类型转换。在这种情况下,编译器将把符号位与实际值沿着存储,最后的位将被丢弃。char c=(char)-128不会给予编译错误,但您将得到荒谬的结果
zf2sa74q9#
也可以使用
Character.isValidCodePoint(int codePoint)
方法检查int值作为字符代码是否有效: