java关系操作符==和equals()区别
程序员文章站
2022-06-16 21:24:47
...
在java中包含的关系操作符有小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。
对象的等价性:
==和!=适用所有对象,但是这两个操作符通常在比较对象的时候会出问题,下面一个列子:
public class Test {
public static void main(String[] args) {
String s1=new String("xxxx1");
String s2=new String("xxxx1");
System.out.println(s1==s2);
System.out.println(s1!=s2);
}
}
输出:false
true
在这里==和!=比较的是对象的引用。尽管对象的内容相同,但是对象的引用却是不同的,说以s1==s2是false。
如果想比较两个对象的实际内容是否相同,此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“基本类型”,基本类型直接使用==和!=即可,列子:
public class Test {
public static void main(String[] args) {
String s1=new String("xxxx1");
String s2=new String("xxxx1");
System.out.println(s1.equals(s2));
}
}
输出:true
但是也有例外!!!!!!
假如你创建了自己的类,就想下面这样:
public class Test {
static int i;
static class EqualsMethod2{
public static void main(String[] args) {
Test t1=new Test();
Test t2=new Test();
t1.i=t2.i=100;
System.out.println(t1.equals(t2));
}
}
}
输出:false
这是由于equals()的默认行为是比较引用。所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。
大多数java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的引用,