A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xieshuhua 中级黑马   /  2012-5-14 15:43  /  2287 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的值哪?原理是什么啊?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油··

查看全部评分

6 个回复

倒序浏览
char x='谢';
                 int  y=x;
                 char z=(char) y;
        System.out.println(y);
        System.out.println(z);
这样就可以了   字符可以自动转换成数字,数字不能自动转换为字符

评分

参与人数 1黑马币 +5 收起 理由
xieshuhua + 5 嗯,非常正确

查看全部评分

回复 使用道具 举报
本帖最后由 王德南 于 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);//这时输出就没问题了
}
}

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
攻城狮 + 1 赞一个!
xieshuhua + 3 呵呵,兄弟你说的对!

查看全部评分

回复 使用道具 举报
对,呵呵,是因为 没有强制转换的原因。int是 4个byte的。char是2个byte。。。。忘记了。
回复 使用道具 举报
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 16:35
java里面自动类型转换的方向是char->int ->long->float->double,和byte->short->int ->long->float->double ...

受教了~~
回复 使用道具 举报
char类型只存储了128种字符,也就是美国标准字符嘛的字符128位
他可以转成数字,但转回去,就不一定在128位里面了
所以没法显示。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马