在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()方法,以便用来比较对象的内容,而非比较对象的引用,
最后需要我们自己实现equals()方法,如下:
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));
}
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(this==obj){
return true;
}
if(obj instanceof Test){
Test tx=(Test) obj;
int t1=this.i;
int t2=tx.i;
if(t1==t2){
return true;
}else{
return false;
}
}
return false;
}
}
这样,输出就是:true;