JAVA中Unicode码拼接问题,产生不同结果的原因是什么?

JAVA中Unicode码拼接问题,产生不同结果的原因是什么?

public static void main(String[] args) {
// 请将下面一组int值视为字符的Unicode码,把它们拼成一个字符串
int a = 72;
int b = 105;
int c = 65281;
String s1 =" "+a + b +c;// 7210565281
System.out.println(s1);
String s2 = (char)a + (char)b + (char)c +""; // 65458
System.out.println(s2);
String s3 = ""+(char)a + (char)b + (char)c; //Hi!
System.out.println(s3);
String s4 = String.valueOf((char)a + (char)b + (char)c); // 65458
System.out.println(s4);
String s5 = String.valueOf((char)a) + String.valueOf((char) b) + String.valueOf((char) c) ;// Hi!
System.out.println(s5);
}

s1 = <String> + <int> + <int> + <int>
String 和 int 相加,会先将 int 类型转成 String,然后拼接字符串。所以你最终看到的是字符串"72"、“105”、"65281"的拼接结果。根据 Java 官方文档,String 和任何非 String 类型进行相加运算时总会将后者转换为 String。如果后者是基本类型,会将其装箱(如 int 转换为 Integer)后调用 toString 方法。
s2 = <char> + <char> + <char> + <String>
这里容易想当然的地方是:char 和 char 相加并不是 String,也不是 char,而是 int。在 Java 语法中,比 int 范围更窄的任意两个整数类型(包括char)运算时会同时提升到 int[3]。所以最后一步加法是 int + String,此时和上一条的情形类似,将 int 转成 String 再拼接。
s3 = <String> + <char> + <char> + <char>
类比 s1,首先将 char 类型转换成 String。这一步转换才是你真正需要的转换。
s4 = String.valueOf(<char> + <char> + <char>)
没啥好说的,跟 s2 的情形一样。
s5 = <String> + <String> + <String>
String.valueOf 函数此时起到了将 char 转换成 String 的效果,于是生成了和 s3 一样的结果。

参考

https://www.zhihu.com/question/503264416

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值