我对Java中的byte和char感到困惑。我有以下程序段:
byte b = 65;
char c = 65;
short s = 65;
System.out.println("b:"+b+" c:"+c+ " s:"+s); // outputs b:65 c:A s:65
b,c和s的位表示相同,它们都是:: 00000000 01000001。
我的问题是,如果位是相同的,那么它们的行为方式不同 - b为byte,c为char,s为short?
另一个问题是:char c = 65;
为什么这是正确的陈述?虽然我将一个int值分配给一个char,但它没有给出错误。
感谢。
答案 0 :(得分:4)
他们的行为有何不同?
参考JLS:
整数类型是byte,short,int和long,其值分别是8位,16位,32位和64位二进制补码整数,以及char,其值为16-表示UTF-16代码单元的位无符号整数。
整数类型的值是以下范围内的整数:
对于字节,从-128到127,包括
简而言之,从-32768到32767,包括
对于int,从-2147483648到2147483647,包括
很长一段时间,从-9223372036854775808到9223372036854775807,包括在内
- 醇>
对于char,从'\ u0000'到'\ uffff'(含),即从0到65535
另一个区别是他们的包装类不同:byte
到Byte
,char
到Character
和short
到Short
。
char c = 65;
为什么这是一个正确的陈述?
char ,其值为16位无符号整数,表示UTF-16代码单元(§3.1)。
答案 1 :(得分:3)
byte
标有Byte
char
标有Character
short
标有Short
这3个类有3种不同的toString()
方法。这就是为什么他们有不同的显示器。
然后,int
到byte
,char
,short
的转化会自动为您完成,然后将其装箱到相应的拳击课。
答案 2 :(得分:2)
1)它们的位表示不相同,对于字节为01000001
,对于short和char为0000000001000001
。
2)区别在于byte和short是有符号整数,char是16位Unicode字符
3)65不是int,它是常量,如果你尝试分配一个int你会得到一个错误
int x = 65;
char c = x; <-- error
答案 3 :(得分:1)
考虑到数据表示的不同,它们的行为不同,不同之处仅在于它们可以在不同的时间间隔内保存值。
至于char,每个字符都有整数表示,这就是为什么它是java中的有效语法。
答案 4 :(得分:1)
所有原始类型(boolean, char, short, int, ...
)实际上是内存中的位数组。
变量的类型仅定义此变量可以取值的范围:
boolean
1位[范围0-1] char
16位[范围0到216-1或\ u0000到\ uFFFF] byte
8位[范围-128到127] short
16位[-32768至32767] int
32位[-2147483648至2147483647] char
由位或互补hex,dec,oct nubmer表示。不要紧。这就是为什么你可以给它分配一个数字,这个nubmer匹配到那个数字的 Unicode 表示。