主题: == 和 equals的区别:
1 : 当我们使用“==”比较时;比较的是两个变量的引用类型,实质比较的是两者的物理地址值(内存地址)。
现在我们来看一个例子:
`Test{
int i = 0;
}
public static void main pactice(String[] args){
Tset t1 = new Tset();
Tset t2 = new Tset();
t1.i=4;
t2.i=4;
System.out.println(t1 == t2);
System.out.println(t1.i == t2.i);
}`
如上面的例子所示打印输出后的值是false;
我们创建了一个Test类,然后创建t1和t2两个Test对象,分别给它们两个进行针对性初始化,我们先比较的是t1 和 t2 这两个的对象 ,返回值是false ;可以看出我们创建了两个对象,在对内存中开辟了两个内存空间,所以t1 不 等于 t2;然而当我们比较t1.i 和 t2.i 的时候 ,我们先是去找对象,对象再去常量池中找4 的地址,所以t1.i 和 t2.i 拿到的同一个常量池中的地址,所以他们的返回值是true。
2. 当我们使用equals()的时候,比较的是两个对象中的值是否相等:
下面我们来看一个例子
class Tset{
int i = 0;
public boolean equls(Tset tset){
if(this == tset){
return true;
}
if(tset == null){
return false;
}
if(this.i == tset.i){
return true;
}
return false;
}
}
我们对这个方法进行了重写,由上述代码中我们可以看见这个方法中也是在用**==** 来进行比较的,最后的实质还是比较里面具体的值是否相等,如果里面具体的值相等的话,即使刚开始不是属于同一个对象的,但他们中具体 成员变量引用常量池中的地址是相同的,所以这个方法是比较具体的值的。