String赋值给StringBuffer 取StringBuffer 值时为啥-48?

qq_28391951 2016-09-18 04:56:42
String b="321";
StringBuffer a=new StringBuffer(b);
System.out.println(a.charAt(1)-48);

这里为啥-48呢?
...全文
265 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nikyotensai 2016-09-19
  • 打赏
  • 举报
回复
引用 1 楼 u013185616 的回复:
你会神奇的发现即使你不-48,得到的也是2。 但是如果你这样写,输出的就不是2了
String b="321";
		StringBuffer a=new StringBuffer(b);
		int c = a.charAt(1);
		System.out.println(c);
不知道你现在有没有点感觉了,a.charAt[1],得到的是 字符串类型char的'2',如果转成int,得到的是50。50是什么?是‘2’的ascii码值。 所以 如果输出的是 System.out.println(a.charAt(1)-48); 那么这个输出调用的是void java.io.PrintStream.println(int x) 如果输出是System.out.println(a.charAt(1));那么这个输出调用的是void java.io.PrintStream.println(char x) 所以这两个虽然结果相同,传的数据类型是不一样的。 具体ASCII的研究还需要你自己去看看
受教了
I,Frankenstein 2016-09-18
  • 打赏
  • 举报
回复 1
你会神奇的发现即使你不-48,得到的也是2。 但是如果你这样写,输出的就不是2了
String b="321";
		StringBuffer a=new StringBuffer(b);
		int c = a.charAt(1);
		System.out.println(c);
不知道你现在有没有点感觉了,a.charAt[1],得到的是 字符串类型char的'2',如果转成int,得到的是50。50是什么?是‘2’的ascii码值。 所以 如果输出的是 System.out.println(a.charAt(1)-48); 那么这个输出调用的是void java.io.PrintStream.println(int x) 如果输出是System.out.println(a.charAt(1));那么这个输出调用的是void java.io.PrintStream.println(char x) 所以这两个虽然结果相同,传的数据类型是不一样的。 具体ASCII的研究还需要你自己去看看

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧