黑马程序员技术交流社区
标题:
java问题
[打印本页]
作者:
范建海
时间:
2015-1-27 22:31
标题:
java问题
String s1 = "ab";
String s4 = "c";
String s3 =s1 + s4;
String s2 = "abc";
System.out.println(s3 == s2);
这里结果为什么为false呢?最好能把程序执行的内存过程说说,谢谢了
作者:
潇洒小哥
时间:
2015-1-27 22:44
==号比较的是一个对象在内存中的地址值,String s1 = "ab";就是s1指向新new出一个对象“ab”,以下的s4,s3,s2也是一样指向新new的对象,所以s3==s2是false
作者:
sq_jun
时间:
2015-1-27 23:29
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
s1+s4相当于在内存中新开辟的地址,所以s3和s2并不指向同一对象,所以结果为false
作者:
yueye13
时间:
2015-1-27 23:50
String本身也是字符串对象,默认的比较方法是比较对象的首地址,
作者:
朋好友
时间:
2015-1-28 00:13
这是引用类型比较的是地址值 可以用int【】数组验证
作者:
梁小刀11
时间:
2015-1-28 20:02
用equals方法比较把.
作者:
希冀
时间:
2015-1-28 20:15
这是比较的对象地址 如果用equals比较的话比较的是对象的内容
作者:
周景新
时间:
2015-1-28 21:06
学习了。
作者:
我为你着迷
时间:
2015-1-28 21:29
==用于比较的是两个对象的地址。
String s3 =s1 + s4; 这个在内存中创建了两个对象 在内存中开辟了2片空间 分配了2片内存地址。
而String s2 = "abc";只在内存中开辟了一个空间。
如果是 System.out.println(s2.equals(s3);这样打印的结果就是true了。
因为equals()比较的是两个字符串的内容是否相同。
作者:
俺做android开发
时间:
2015-1-28 21:44
楼主,你用equals()来判断下,发现结果为true,当用equals()判断时,会比对s3和s2的hash码,hash码是根据这两个字符串的各项属性来计算得出的,如果hash码相同,那么就判断为同一个数据。
但你用==,比较的就只是引用地址。在API文档中写了:“Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 ”。也就是说s2,s3就像是两个实例化对象,s2在内存中占了一块空间,s3占了另一块空间,它们两的引用地址自然就不同,用==自然为false
作者:
流行VS泪痕
时间:
2015-1-28 22:29
我记得好像是S3和S2虽然都是字符串儿,但是他们俩在内存中是独立存在,开辟的内存不一样。应该用equals()比较吧!
作者:
丶人世百态
时间:
2015-1-28 22:39
你的赋值操作应该是对地址值得操作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2