黑马程序员技术交流社区

标题: 关于字符和字符串输出的问题 [打印本页]

作者: bushangkoukou    时间: 2013-5-22 15:28
标题: 关于字符和字符串输出的问题
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

我们知道 + 有两种用法如果两边都为数值做相加,否则做链接,请问最后一个里面的  '男'不是字符么,不是数值,怎么做相加运算了?
作者: 谢孔营    时间: 2013-5-22 15:44
既然c,和c2都是字符,可以自动转为ASCII码进行运算,那么字符‘男’也是一样,也可自动转为ASCII码,如果是把‘男’改为
“男”字符串就不会输出数字了。
作者: 王靖远    时间: 2013-5-22 15:47
字符当然是相加了。自动转化成ASCII码表中对应的数字相加。想是字符连接符的话就要用双引号。
作者: 王靖远    时间: 2013-5-22 15:48
char可以存单个字。因为都是占2个字节,所以也可以和字符进行运算。
作者: ozt6719393    时间: 2013-5-22 16:01
字符+“”会变成字符串相连接,所以第一次的输出时“张三”。
第二次中“张”+“三”,首先会把“张”和“三”装换成ASCII表对应的数值再相加,所以是44329。
第三次原理同第二次,所以是94336.如果是把‘男’改为“男”字符串就不会输出数字了。
作者: 骑上最爱    时间: 2013-5-22 17:11
' '号引起来的都是字符,说以在怎么相加都是数字,如果在后面加个“”号就转换为字符串了。
作者: kaka小明    时间: 2013-5-22 17:38
汉字字符常量在java中的默认编码方式是UNICODE,都有自己对应的码值,就像英文字符采用ASCII码一样,如果均是字符相加,则是对各自的码值做求和,当有字串时,这做字串链接处理。
作者: 金辉    时间: 2013-5-22 17:57
System.out.println(c+c2);  和   System.out.println(c+'男'+c2);
中输出的本质上是相同的,都会进行运算,'男'也是char类型的
前面System.out.println(c+""+c2); 在中间加上了“”,它整体转换成String类型的了
作者: Super_Class    时间: 2013-5-22 18:04
这个就要说到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还是字符串




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