黑马程序员技术交流社区

标题: ==与equals疑惑 [打印本页]

作者: 王_强    时间: 2013-3-25 07:58
标题: ==与equals疑惑
package com.strings;

public class StringTest1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
          //字符串最大的特点:一旦被初始化就不可以被改变
                String s1="abc";
                String s2=new String("abc");
               
               
                //s1和s2有什么区别
                  //s1 代表一个对象在内存中只要一个对象,s2在内存中有两个有两个对象
               
                System.out.println(s1==s2);
               
                System.out.println(s1.hashCode());
                System.out.println(s2.hashCode());
               
                System.out.println(s1.equals(s2));               
        }

}
运行结果:
false
96354
96354
true
不是说,String比较时,==比较的是对象的引用值,而equal比较的是包含的内容,上面的结果有点疑惑?
第一个应该是true才对。
作者: 胡志超    时间: 2013-3-25 08:13
==比较的是地址值,由于String类重写了equals()方法,其equals()方法是根据哈希值来比较的
作者: 李尧    时间: 2013-3-25 08:21
1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
   2. 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
   3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
==比较的是内存空间.




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