概要
- == 与 equals
- 字符串的比较
==
与equals
在java中,使用==和equals对值进行比较。对于基本类型,==
操作会比较他们的值,而对于对象,比较的是对象的引用,而不是对象的属性值。
public class Person { |
如果要对对象的值进行比较,我们需要用到equals方法。
我们使用equals方法替换上面代码中的==
System.out.println(p1.equals(p2)); // false |
最后结果仍然是false,为什么呢?
查看equals函数可以发现,equals仍旧使用了==
,,所以结果没有变化
public boolean equals(Object obj){ |
所以我们需要对equals方法进行修改
public boolean equeals(Person person){ |
于是下面语句将得到true
System.out.println(p1.equals(p2)); // true |
字符串的比较
public class Main{ |
== 比较对象的引用,所以我们得到了false,如果把代码改成这样:
public class Main{ |
我们得到的结果是true,嗯?为什么呢?
我们确定==比较的是对象的引用,这说明,s1和s2的引用指向了同一块内存的值。
字符串有一个专门的用来存储的字符串池,每次执行String str=""
操作时,都会检查字符串池中是否存在完全一样的字符串。如果不存在就会创建一个新的String,存在则不会新建,而是会将新的引用指向已存在的字符串的地址,使用new新建则会开辟新的内存空间。
String.intern()方法
intern方法:
- 检查字符串池中是否存在相同的字符串
- 存在则返回其引用
- 不存在则新增该字符串并返回它的一个引用
public class Main { |
对象间的比较,应该使用equals()方法
参考链接
- 本文作者: Naskete
- 本文链接: https://Naskete.github.io/2022/03/07/essay/JAVA_Compare/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!