黑马程序员技术交流社区
标题:
关于String字符串的比较
[打印本页]
作者:
罗杰
时间:
2012-3-27 08:57
标题:
关于String字符串的比较
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
为什么不一样呢?听老师讲过,又忘了。。。
作者:
王国华
时间:
2012-3-27 09:01
本帖最后由 王国华 于 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都指向同一个对象
作者:
应佳锋
时间:
2012-3-27 09:03
这种题目如果我直接告诉你答案 只是治标不治本 是不负责的
建议先去了解什么叫值类型 什么叫引用类型 等理解了这2个东西你就知道 所以然了!
作者:
孙地豪
时间:
2012-3-27 09:24
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
作者:
〆_xin_、_跳
时间:
2012-3-27 10:44
String s1 = "abc";
String s2 = "abc";
像这种形式,内容相同,只是变量名不为,系统会分配同一内存空间。
String s1 = new String("abc");
String s2 = new String("abc");
这种形式,每new一次,系统会分配一个内存空间,s1为一个内存地址,s2为另外一个内存地址,所以两个不是同一内存空间
作者:
1002865186
时间:
2012-3-27 11:00
==比较的的是内存地址,String 在new 的时候 即使内容一样 创建的也是不同的对象
作者:
李井山
时间:
2012-3-27 11:04
String s1 = "abc";
String s2 = "abc";
在内存中是同一个,而如果你用new的话,是一定创建一个新对象的
作者:
李见黎
时间:
2012-3-27 11:06
new每次都建一个新对象,所以指向不同的内存区域。==比较的是内存地址。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2