今天遇到一个判断String内容是否相等的场景 开始用的==发现有问题之后改用equals 查了下两者区别 在这记录下
==操作符
1、对于基本数据类型 ==可判断两者是否相等 此时比较的是值
2、对于非基本类型 其用于判断两者是否引用同一地址 此时比较的是地址
equals方法
先看下String 重写的equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = length();
if (n == anotherString.length()) {
int i = 0;
while (n-- != 0) {
if (charAt(i) != anotherString.charAt(i))
return false;
i++;
}
return true;
}
}
return false;
}
由此我们可以知道String的equals方法是比较的两字符串的内容
总结
根据自己的需求使用 如果是基本数据类型则使用= = 如果是非基本数据类型 比较对象是否相等用 = =, 比较对象内容是否相同用equals
补充
关于String一些知识的补充
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
结果:true true
如果String不是通过new关键字来创建的,虚拟机就不会为这两个String对象分配新的内存堆,而是到String缓冲池中来寻找。所以s1和s2实际上是指向同一块内存地址
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
结果:false true
String通过new关键字分别创建了一个新的String对象,new关键字为创建的每个对象分配一块新的、独立的内存堆。所以s1和s2是两个对象 其地址不同 但是连个对象的内容相同