黑马程序员技术交流社区

标题: 关于day12中,String类面试题的疑问,请解惑,谢谢 [打印本页]

作者: SkyBlack    时间: 2016-5-27 10:52
标题: 关于day12中,String类面试题的疑问,请解惑,谢谢
在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创建的字符串对象,故而将字符串加载进常量池,所以直接比较的就是属性值。不知道是不是这么理解的,还请大神指导。谢谢





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2