黑马程序员技术交流社区

标题: 吧2个字符连着打印不出来 [打印本页]

作者: ilvsoft    时间: 2014-4-7 09:56
标题: 吧2个字符连着打印不出来
        System.out.println('*'+'*');//打印出来是84
        System.out.println("*"+'*');//打印出来是**
        System.out.println('*');//打印出来是*
按我的想法System.out.println('*'+'*');应该打印出来是**才对啊,为什么会是84呢
作者: ok-Prince    时间: 2014-4-7 11:01
本帖最后由 ok-Prince 于 2014-4-7 11:03 编辑

'*'是字符,不是字符串,字符串是双引号,字符是单引号的,'*'在ASCII表中对应的数值是42,两个42做加法运算当然就是84啦,所以会打印出84来,就比如说你输入个'A'+'B',计算机会运算65+66然后把他们的和打印出来是一个道理。下面链接地址是ASCII码表,可以对照上面看一看:
http://www.96yx.com/tool/ASC2.htm

作者: zhangbingyuan    时间: 2014-4-7 11:10
首先要明确的是    '*' 的类型是char类型的   "*"的类型是String类型的

如果char + char,那么就会进行自动类型提升,变成 int(char) + int(char)
int('*') == 42;  //即 * 的ASCII码
所以 int('*') + int('*')  == 84;

而对于String + (char、int、。。。) ,都会将右边自动类型提升为String类型。
所以“*”+ '*'  ----> **  // '*'自动类型提升为String类型,变成了“*”+“*”---->"**"

至于单独打印'*'的时候,没有进行运算,所以不存在自动类型提升,直接输出了char类型的 * 。

希望可以帮到你
作者: 曲佳奇    时间: 2014-4-7 11:17
规则:
1.当左右两边连接的都是非数字类型时,则为连接符;
2当一边是数值类型,另一边是非数值类型时,则为连接符;
3.当两边都是数值类型时,则为运算符,即相加求和的作用。

第一个输出84 是因为加号两边都是'*'(单引号) 属于char类型 这里就把'*'的编码相加了 所以输出的是84
第二个输出** 是因为"*"(双引号) 属于String类型 所以这里+号就起到了链接符的作用
第三个输出* 这个是输出char的一种方式





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