黑马程序员技术交流社区

标题: int类型可以隐式转换为char类型? [打印本页]

作者: 马林康    时间: 2012-9-24 00:09
标题: int类型可以隐式转换为char类型?
  1. public class CharTest {
  2.         public static void main(String[] args) {
  3.                 System.out.println('\u005B'+"hello"+'\u005D');//输出[hello]
  4.                 int a='a';
  5.                 System.out.println(a);//97
  6.                 char ch1=0x5B;
  7.                 char ch2=0x5D;
  8.                 System.out.println(ch1+"world"+ch2);//[world]
  9.         }
  10. }
复制代码
程序正常运行 这是什么情况? char 自动转换为int正常~int自动转换为char不可接受!!
作者: 冯伟    时间: 2012-9-24 00:45
八进制、十六进制不能算整型,编译器在编译时就会把他们自动变成二进制,只要不超过所赋值类型就可以正常运行,不涉及类型转换
作者: 金政极    时间: 2012-9-24 00:54
我试验过了你取的十六进制数的范在CHAR的取值范围内所以运行没有错误,如果超出CHAR的范围就会报错
2楼说的非常清楚了。
作者: 王贵朝    时间: 2012-9-24 07:54
char在其实存储是字符编码,当你打印是其实打印的就是字符所对应的字符编码
作者: 黑马张旭明    时间: 2012-9-24 08:27
int占4个字节,char占两个字节,把char赋值给int,int就把值存入低位的两个字节,高位两字节补零。

char                  1010-1100
int    0000-0000-1010-1100

int赋值给char就会出现4个字节的数据存到2个字节的存储空间。

int    0110-0011-1110-0001
char                  1110-0001
丢失了两个个字节的数据,损失了精度,需要用强转来告诉编译器你确定要这样做。


作者: 柳彬    时间: 2012-9-24 08:28
这很正常啊,你加了转义字符\就会吧八进制转为相应的字符塞
作者: 佘天宇    时间: 2012-9-24 21:27
char ch1=0x5B;
char ch2=0x5D;

这里面的0x5B,ox5D两个16进制数据其实还是字符,在ASCII中是用一个字节的全部8位(bit)表示的,对应的ASCII中的字符就是'['和']',占的都是一个字节,并不是表示转换后为int类型的数据91和93,在内存中占4个字节,这是我的理解,希望能够对你有用。
作者: 尤圣回    时间: 2012-9-24 21:30
低的可以自动提升 也可以下降不够很容易出错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2