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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王_强 中级黑马   /  2013-3-25 07:58  /  1580 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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-26 12:20

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
==比较的是地址值,由于String类重写了equals()方法,其equals()方法是根据哈希值来比较的
回复 使用道具 举报
1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
   2. 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
   3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
==比较的是内存空间.

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马