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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ilvsoft 中级黑马   /  2014-4-7 09:56  /  1148 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        System.out.println('*'+'*');//打印出来是84
        System.out.println("*"+'*');//打印出来是**
        System.out.println('*');//打印出来是*
按我的想法System.out.println('*'+'*');应该打印出来是**才对啊,为什么会是84呢

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 ok-Prince 于 2014-4-7 11:03 编辑

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

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

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

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

希望可以帮到你

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
规则:
1.当左右两边连接的都是非数字类型时,则为连接符;
2当一边是数值类型,另一边是非数值类型时,则为连接符;
3.当两边都是数值类型时,则为运算符,即相加求和的作用。

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

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

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