黑马程序员技术交流社区

标题: s2是指向哪里的? [打印本页]

作者: bigbean    时间: 2014-3-1 19:34
标题: s2是指向哪里的?
本帖最后由 bigbean 于 2014-3-1 20:11 编辑
  1.                 String s1 = "abc";
  2.                 String s2 = new String("abc");
  3. String s3 = "abc";
  4.                 System.out.println(s1==s2);
  5.                 System.out.println(s1==s3);
复制代码

这三个变量都是abc,为什么System.out.println(s1==s2)的结果是false啊,s2的值不是指向字符串常量值abc的地址吗?

作者: volvoxc    时间: 2014-3-1 19:42
”==“ 比较的是两个对象在内存中的地址是否相同,要比较他们的值是否相同用equals.
作者: java--周群    时间: 2014-3-1 19:59
String s2 = new String("abc");

这是在堆内存创建了字符串对象。s2指向的是堆内存地址值

String s1 = "abc";
String s3 = "abc";

s1创建的时候会在常量池记录一个地址值,当s3再创建时,首先在常量池寻找存在abc,就不再创建了,把常量池的abc地址值赋值给s3  s1=s3的

作者: 午夜b'Boy    时间: 2014-3-1 20:01
String s1 = "abc"; 没用new关键字,存在常量池中。String s2 = new String("abc");使用new关键已字,存在堆内存中,返回false
作者: bigbean    时间: 2014-3-1 20:12
java--周群 发表于 2014-3-1 19:59
String s2 = new String("abc");

这是在堆内存创建了字符串对象。s2指向的是堆内存地址值

谢谢,知道了




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