黑马程序员技术交流社区

标题: 关于基本类型-字符的小问题 [打印本页]

作者: xieshuhua    时间: 2012-5-14 15:43
标题: 关于基本类型-字符的小问题
public class luck{
public static void main  (String[] args) {
         char x='谢';
         int  y=x;
        /* char z=y;*/
System.out.println(y);
/*System.out.println(z);*/
}
}
程序能正常显示计算出y的值,说明字符是以数字的形式保存的,可是为什么不能计算出z的值哪?原理是什么啊?
作者: 蒋映辉    时间: 2012-5-14 15:51
char x='谢';
                 int  y=x;
                 char z=(char) y;
        System.out.println(y);
        System.out.println(z);
这样就可以了   字符可以自动转换成数字,数字不能自动转换为字符
作者: 王德南    时间: 2012-5-14 16:03
本帖最后由 王德南 于 2012-5-14 16:04 编辑

public class luck{
public static void main  (String[] args) {
         char x='谢';
         int  y=x;//这里自动进行的类型的转换。低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值。
                所以这时的y对应的值为‘谢’的ASCII码值。也即是后面输出的数字
         char z=(char)y;//这里要加强制转换,因为i高级类型int不能自动转换成低级类型char
System.out.println(y);//这里输出的y值是字符‘谢’的ASCII码值。
System.out.println(z);//这时输出就没问题了
}
}

作者: xieshuhua    时间: 2012-5-14 16:14
对,呵呵,是因为 没有强制转换的原因。int是 4个byte的。char是2个byte。。。。忘记了。
作者: 赵方明    时间: 2012-5-14 16:35
java里面自动类型转换的方向是char->int ->long->float->double,和byte->short->int ->long->float->double,从左往右可以自动转换,从右往左就要用强制类型转换。
把char z=y;改成 char z=(char)y;就可以了
另外楼主的代码格式不清晰啊。
class luck
{
public static void main(String[] args)
        {
     char x='谢';
    int  y=x;
    char z=(char)y;
    System.out.println(y);
    System.out.println(z);
   }
}
作者: 李斌    时间: 2012-5-14 19:53
赵方明 发表于 2012-5-14 16:35
java里面自动类型转换的方向是char->int ->long->float->double,和byte->short->int ->long->float->double ...

受教了~~
作者: wangrenjie    时间: 2012-5-14 21:59
char类型只存储了128种字符,也就是美国标准字符嘛的字符128位
他可以转成数字,但转回去,就不一定在128位里面了
所以没法显示。




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