char c=7;
Run Code Online (Sandbox Code Playgroud)
即使我们为字符分配了一个数字,上面的语句也会在java中执行而不会出错.其中7不是一个字符.为什么它会执行?
Bil*_*ard 13
因为在Java中char是一个整数数据类型,其值是16位无符号整数,表示UTF-16代码单元.由于char是数字数据类型,因此在为其指定数值时,它只会对该值表示的任何Unicode字符进行编码.
运行以下两行代码:
char c = 65;
System.out.println("Character: " + c);
Run Code Online (Sandbox Code Playgroud)
你会看到输出:
Character: A
Run Code Online (Sandbox Code Playgroud)
(我会像你在例子中那样使用7,但这是一个不可打印的字符.)打印字符"A",因为十进制值65(或41十六进制)被编码为字母表中的字母.有关Unicode的更多信息,请参阅Joel Spolsky的文章绝对最低每个软件开发人员,绝对必须知道关于Unicode和字符集(没有借口!).
如果您正在讨论通常int值赋值char给您"可能会丢失精度"编译器错误的事实,如下面的代码将演示:
int i = 65;
char c = i;
System.out.println("Character: " + c);
Run Code Online (Sandbox Code Playgroud)
答案正是PSpeed在评论中提到的.在代码的第一个(2行)版本中,文字赋值有效,因为该值在编译时是已知的.由于值65在char('\ u0000'到'\ uffff'包含,或从0到65535)的正确范围内,因此允许进行分配.在第二个(3行)版本中,不允许赋值,因为int变量可以取-2147483648到2147483647之间的任何值,其中大部分都超出了char要包含的变量的范围.
小智 5
阅读http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Character.html,特别是Unicode字符表示部分.字符的原始值具有等价的整数.