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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

1 个回复

正序浏览
char 运算  参考ASIC码表
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马