面试题:"equals"与"=="

使用==判断的是两个字符串对象的内存地址,而非字符串内容
equals:判断两个字符串内容是否相等,也会检查字符的大小写
e
qualsIgnoreCase()方法,会忽略字符的大小写。

好吧,上面的这个讲的确实是有点抽象~
那我们来看看下面的这一段代码:

String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false  对于基本操作数"=="判断操作数是否相等;对于对象使用"=="会比较内存地址是否相同
System.out.println(str1.equals(str3));//true,因为equals比较的是对象的内容是否相等

现在是不是有丢丢懂啦~~~

小知识:
在Java虚拟机中有一个保存字符串的池,它会记录所有字符串。
而Java虚拟机为了提高字符串应用效率,提供了字符串池来保存字符串常量,
str1创建字符串常量”abc”,这时会先检测字符串池中是否包含该字符,如果不包含,则创建字符串常量到字符串池中,然后再返回.
str2也赋值为字符串”abc:,这时由于字符串池中已经存在该字符串,所以不再创建,直接返回该字符串,也就是说这两个变量引用同一个字符串,那么它们的内存地址是相同的,所以str1==str2成立.
但是使用new关键字创建的字符串会开辟内存空间,所以str1==str3不成立

重写equals方法


参考:《Java经典编程300例》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值