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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 星际传奇 中级黑马   /  2016-5-27 21:40  /  461 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s1 = "ab";
         String s2 = "abc";
         String s3 = s1 + "c";
        int i,j,k;
        k=s1.hashCode();
        j=s2.hashCode();
        i=s3.hashCode();
        System.out.println(s3 == s2);
        System.out.println(i+" "+j+" "+k);

s3==s2结果为false不是他们地址不同么 为什么后面哈希码相同?
false
96354 96354 3105

5 个回复

倒序浏览
String s="abc";
String s1=new String("abc");
System.out.println(s==s1);//false
System.out.ptingln(s.hashCode);//96354
System.out.println(s1.hashCode);//96354
老师讲的是==比较的是内存地址,hashCode相同,但比较结果为false,不理解.
回复 使用道具 举报
不等的  如果是s3==”ab“+"c",就是相等的,因为变量的操作s1+"c",会产生新的地址 地址不一样的
回复 使用道具 举报
http://blog.csdn.net/gaopeng0071/article/details/11741027这上面讲的挺详细的,可以看看
回复 使用道具 举报
首先你要知道字符串常量池的存在,字符串做+操作时先拼接在到常量池找有没有,变量存在于栈内存中,存放的是堆内存中的地址值,对内存中的地址值不同,但是内容相同,都指向常量池中的abc,ok?
回复 使用道具 举报
可以看一下这个http://www.cnblogs.com/heima-jieqi/archive/2012/04/10/2440086.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马