感觉你的问题前提条件有点问题,通过两个例子分析一下
例一
public class EqualsMethod {
public static void main(String[] args) {
String str =“wxy”;//在栈内存中定义一个str1变量,然后在常量池中创建"wxy“,然后将地址传给str1,str1指向了"wxy"
String str2=new String(“wxy”);//在栈内存中定义一个str2变量,然后在堆内存中创建String对象,然后再创建一个”wxy“,并将其地址传给str2
System.out.println(str1==str2);//这里比较的是地址,一个是常量池的,一个是堆内存的,肯定不一样啊,所以返回false
System.out.println(str1.equals(str2));//这里比较的是内容,所以返回的是true
}
}
例二
class Value
{
int n;
}
public class EqualsMethod1 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(n1.equals(n2));//这里的equals()用的是Object类中的,没有经过复写,在这里和”==“功能相同,比较的是地址,因为这里是new了两个对象,地址
} //肯定不同,所以返回的是false
}