A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在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创建的字符串对象,故而将字符串加载进常量池,所以直接比较的就是属性值。不知道是不是这么理解的,还请大神指导。谢谢

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马