黑马程序员技术交流社区

标题: 字符串是否相等 [打印本页]

作者: 星际传奇    时间: 2016-5-27 21:40
标题: 字符串是否相等
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
作者: 蓝色风信子    时间: 2016-5-27 22:28
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,不理解.

作者: lifeiwangyue    时间: 2016-5-27 22:43
不等的  如果是s3==”ab“+"c",就是相等的,因为变量的操作s1+"c",会产生新的地址 地址不一样的
作者: 蓝色风信子    时间: 2016-5-27 23:06
http://blog.csdn.net/gaopeng0071/article/details/11741027这上面讲的挺详细的,可以看看
作者: hero_king    时间: 2016-5-27 23:12
首先你要知道字符串常量池的存在,字符串做+操作时先拼接在到常量池找有没有,变量存在于栈内存中,存放的是堆内存中的地址值,对内存中的地址值不同,但是内容相同,都指向常量池中的abc,ok?
作者: 一个大西瓜    时间: 2016-5-28 00:08
可以看一下这个http://www.cnblogs.com/heima-jieqi/archive/2012/04/10/2440086.html




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