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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗杰 中级黑马   /  2012-3-27 08:57  /  1989 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
结果显示true

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
结果显示false

为什么不一样呢?听老师讲过,又忘了。。。

7 个回复

倒序浏览
本帖最后由 王国华 于 2012-3-27 09:14 编辑

String s1 = new String("abc");
String s2 = new String("abc");
new每次都建一个新对象,所以指向不同的对象
String s1 = "abc";
String s2 = "abc";//此时会去内存中查找是否存在"abc"若存在则指向
此时s1和s2都指向同一个对象
回复 使用道具 举报
这种题目如果我直接告诉你答案 只是治标不治本 是不负责的
建议先去了解什么叫值类型 什么叫引用类型  等理解了这2个东西你就知道 所以然了!
回复 使用道具 举报
String s1 = "abc";       // s1  指向 静态区中的 "abc"地处
String s2 = "abc";     //  s2 也指向  静态区中的 "abc"地处  因为 在静态区中 已经有 "abc"地处,就不会在开辟 "abc"地处。
                   // 所以 s2  和 s1指向了 同一个"abc"    String s2 = "abc" 相当于 String s2  = s1

System.out.println(s1 == s2);   
结果显示true

String s1 = new String("abc");    //new String("abc")  是在 内存 堆 中开辟的 一块新空间
String s2 = new String("abc");     //new String("abc")  是在 内存 堆 中开辟的 一块新空间
System.out.println(s1 == s2);    //他们 指向的 不是同一地址 , 结果当然返回false
回复 使用道具 举报
String s1 = "abc";
String s2 = "abc";
像这种形式,内容相同,只是变量名不为,系统会分配同一内存空间。
String s1 = new String("abc");
String s2 = new String("abc");
这种形式,每new一次,系统会分配一个内存空间,s1为一个内存地址,s2为另外一个内存地址,所以两个不是同一内存空间
回复 使用道具 举报
String s1 = "abc";
String s2 = "abc";
在内存中是同一个,而如果你用new的话,是一定创建一个新对象的
回复 使用道具 举报
==比较的的是内存地址,String 在new 的时候 即使内容一样 创建的也是不同的对象
回复 使用道具 举报
new每次都建一个新对象,所以指向不同的内存区域。==比较的是内存地址。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马