字符串比较相等 java_[java面试题]判断字符串相等,看这一篇就够了

String s11 = "a";

String s22 = "bc";

String s1 = "abc";

String s2 = "a" + "bc";

String s3 = new String("a") + "bc";

String s4 = new String("a") + new String("bc");

String s5 = new String("abc");

String s6 = s11 + s22;

System.out.println(s1 == s2);

System.out.println(s1 == s3);

System.out.println(s1 == s4);

System.out.println(s1 == s5);

System.out.println(s1 == s6);

System.out.println(s3 == s4);

System.out.println(s4 == s5);

System.out.println(s1 == s5.intern());

System.out.println(s1 == s6.intern());

System.out.println(s1.equals(s5));

System.out.println(s1.equals(s6));

输出结果:

true

false

false

false

false

false

false

true

true

true

true

解析:

"=="符号是判断地址是否相等,所以每次"new String("")"都会有自己地址空间所以s1和s3,s4,s5为"false"。而s1和s6为什么也为"false"呢?这是因为字符串变量相加会额外创建StringBuilder调用append方法,之后会StringBuilder转换String,在此会new对象,因此也为false。

//StringBuilder的toString方法,这里会new String

@Override

public String toString() {

// Create a copy, don't share the array

return new String(value, 0, count);

}

"equals"只是判断值是否相等,所以s1和s5,s6为"true"。

"intern"字符串的值输出无任何变化,在调用s5.intern()方法的时候会返回”abc”,但是这个方法会首先检查字符串池中是否有”abc”这个字符串,如果存在则返回这个字符串的引用,否则就将这个字符串添加到字符串池中,然会返回这个字符串的引用。

(完)

更多内容关注微信公众号:阿林小站

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值