我在Java中的Number Wrapper类中感到困惑.
这两个任务看上去对称的-一个char被分配到Integer和int分配到Character.但是,第一次任务
Integer i = 'a';
Run Code Online (Sandbox Code Playgroud)
给出编译错误,而第二个赋值
Character ch2 = 97;
Run Code Online (Sandbox Code Playgroud)
被允许.为什么?
虽然int i = 'a'工作正常,Integer但不允许将其转换为相同,因为它需要装箱转换.
Java的装箱转换仅针对八种情况定义:
boolean到类型Booleanbyte到类型Byteshort到类型Shortchar到类型Characterint到类型Integerlong到类型Longfloat到类型Floatdouble到类型Double由于'a'是char文字,Java不允许转换char为Integer:字符文字始终是类型char.
但是,当你写作
Character ch2 = 97;
Run Code Online (Sandbox Code Playgroud)
Java编译器看到的是97是在有效范围内char(即0..65535),所以它把97作为char,不int,并允许装箱转换.尝试使用超出范围的常量会产生错误:
Character ch3 = 65536; // error: incompatible types: int cannot be converted to Character
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |