黑马程序员技术交流社区

标题: Java基础班学习过程中的十大谜题系列-----字符谜题 [打印本页]

作者: bobo2017    时间: 2017-10-10 17:15
标题: Java基础班学习过程中的十大谜题系列-----字符谜题
   字符谜题之消失的笑声
   先看下面代码,你认为输出的是什么?
     
[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) {
                System.out.println("H"+"a");
                System.out.println('H'+'a');
               
        }

   运行一下上面代码,发现输出并不是HaHa,而是Ha169 最后的一声笑诡异的消失了?为什么会出现这样的情况,笑声凭空就消失了?
   上述程序,第一个输出没有问题输出的是两个字符串"H"和"a"连接的结果,而后面的输出并不是'H'和'a'连接的结果,而是将char类型的H(72) 和a(97) 进行算术加法运算输出的是ASIC码169.那为什么会出现这样的情况呢,原因是print()函数没有重载一个print(char +char)这样的函数,当然这样的函数也不合法.因此先会执行('H'+'a')表达式,我们在基础类型课上已经学过 char,short,byte 进行算术运算会自动向上转型,因此('H'+'a')得到的就是int类型的值,因此就调用了println(int a)函数输出,那当然输出的是数字了.因此我们要在println()输出两个字符就需要其他方法.在这我举例三种方法:

1.傻瓜式:既然不能输出两个那我就一个一个输出  先System.out.print('H');然后System.out.println('a');
[AppleScript] 纯文本查看 复制代码
System.out.println('H');
                System.out.println('a');

2.简便式:我们可以将char类型隐性转换为String,只需要在(""+'H'+'a') 这样第一个+号会被认为是连接符将'H'隐式转化为"H"进行连接,同理'a',也会这样执行.
[AppleScript] 纯文本查看 复制代码
System.out.println(""+'H'+'a');

3.面向对象:通过面向对象思想,我们可以使用Stringbuilder类的连接方法append(char)分别将两个字符加入Stringbuilder实例,输出
[AppleScript] 纯文本查看 复制代码
StringBuilder  sb = new StringBuilder();
                sb.append('H');
                sb.append('a');
                System.out.println(sb);

4.格式化输出方法:这是带有C语音风格的代码,而且JDK1.5以后才支持的,不太建议使用.
[AppleScript] 纯文本查看 复制代码
System.out.printf("%c%c",'H','a');


作者: xinfei.liu    时间: 2017-10-10 23:44
char 运算  参考ASIC码表




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