字符谜题之消失的笑声
先看下面代码,你认为输出的是什么?
[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');
|