在day12天中的12.8,疑惑如下
例1:
class Test_String {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
例2:
package com.heima.student;
class Test_Student {
public static void main(String[] args) {
Student s1 = new Student("张三",23);
Student s1 = new Student("张三",23);
System.out.println(s1.equals(s2));
}
}
为什么在例1中不用重写equals语句就可以对比两者属性呢?
而例2讲过的是equls语句底层就是运用的 == ,所以对比的也是地址值,要重写equals语言才能对比属性。
在这里有些困惑,能否解答一下。
而我的理解是:可能例2讲的是有一个对象的创建和方法的引用,所以将字符串加载进堆内,所以是将地址值进行比较,而这个程序直接用String创建的字符串对象,故而将字符串加载进常量池,所以直接比较的就是属性值。不知道是不是这么理解的,还请大神指导。谢谢
|
|