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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bushangkoukou 中级黑马   /  2013-5-22 15:28  /  1395 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

char c='张';

                char c2='三';

                System.out.println(c+""+c2);

这个我们知道的,输出的是张三

char c='张';

                char c2='三';

                System.out.println(c+c2);


这个我们也知道输出的是数字44329

char c='张';

                char c2='三';

                System.out.println(c+'男'+c2);

问题来了,为什么这个输出的也是数字   94336

我们知道 + 有两种用法如果两边都为数值做相加,否则做链接,请问最后一个里面的  '男'不是字符么,不是数值,怎么做相加运算了?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

8 个回复

倒序浏览
既然c,和c2都是字符,可以自动转为ASCII码进行运算,那么字符‘男’也是一样,也可自动转为ASCII码,如果是把‘男’改为
“男”字符串就不会输出数字了。
回复 使用道具 举报
字符当然是相加了。自动转化成ASCII码表中对应的数字相加。想是字符连接符的话就要用双引号。
回复 使用道具 举报
char可以存单个字。因为都是占2个字节,所以也可以和字符进行运算。
回复 使用道具 举报
字符+“”会变成字符串相连接,所以第一次的输出时“张三”。
第二次中“张”+“三”,首先会把“张”和“三”装换成ASCII表对应的数值再相加,所以是44329。
第三次原理同第二次,所以是94336.如果是把‘男’改为“男”字符串就不会输出数字了。
回复 使用道具 举报
' '号引起来的都是字符,说以在怎么相加都是数字,如果在后面加个“”号就转换为字符串了。
回复 使用道具 举报
汉字字符常量在java中的默认编码方式是UNICODE,都有自己对应的码值,就像英文字符采用ASCII码一样,如果均是字符相加,则是对各自的码值做求和,当有字串时,这做字串链接处理。
回复 使用道具 举报
金辉 高级黑马 2013-5-22 17:57:43
8#
System.out.println(c+c2);  和   System.out.println(c+'男'+c2);
中输出的本质上是相同的,都会进行运算,'男'也是char类型的
前面System.out.println(c+""+c2); 在中间加上了“”,它整体转换成String类型的了
回复 使用道具 举报
这个就要说到unicode表了。

System.out.println(....);//这个输出语句,得到的一定是字符串

  System.out.println(c+""+c2);//这个是直接转成String了。
  System.out.println(c+c2);  //这个char+char类型的,得到的是char类型的。在ASCII表中是有映射的。
System.out.println(c+'男'+c2); //这个也是一样的,计算结果也是char类型的。


注意以下这种情况:

System.out.println(""+1+2);//这里得到的是字符串。
System.out.println(1+2); //这里得到的结果3,是基本数据类型。但是自动包装了。又调用了Integer的toString方法。所以输出的3还是字符串

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马