java字符串连接操作符“+”之谜

1. 3+3=33?

2. char[] test = {'1','2','3'}; System.out.print("test"+test);输出test=123吗??

3. "hello world" 不等于"hello"+"world"???

4.“hello world" 也不等于”hello world“????


测试代码及结果如下:



解惑:

1.众所周知,+号除了有加法功能外,最多的就是被用来连接字符串了,那么这里的+号是用作什么功能呢?显然是用作连接字符串。那么System.out.println('3'+'3');呢?结果将会输出102(3的uicode值是51),这里+号用加法功能。 在java里我们要区别好字符串与字符类型的区别,局部相加并不等于整体。‘H’+‘i’ 不等于“hi”。

2. 这与char数组上调用toString方法有关,数组是从Object哪里继承了tostring方法而没有重载,在规范中描述道“返回一个字符串,它包含了该对象所属类的名字,”@“符号以及表示对象散列码的一个无符号十六进制整数”,所以就有了我们那个丑陋的输出了。要正确的输出字符序列,我们可以先调用String.valueOf(test)方法返回一个字符串对象再进行输出(把字符数组先转化为字符串)。当然我们还可以将System.out.println("test="+test);;分开两次来输出以达到目的效果,即:System.out.println("test=");System.out.println(test);

3.这与==符号有关,只有“==”两边的引用指向了同一个对象时结果才会返回true,一般情况下判断引用是否相等我们都推介使用equals方法。

4.这里与“+”号的优先级有关系,不管+号是用作加法还是用作连接字符串,它的优先级都要比“==”号要高,所以System.out.println("h1==h2?:"+h1==h2);等价于:System.out.println(("h1==h2?:"+h1)==h2);永远输出false。如果我们使用System.out.println("h1==h2?:"+h1.equals(h2));就会得到正确的结果了。可见用equals方法可以为我们除掉很多不必要的麻烦。


--例子参考自《java解惑》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值