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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bigbean 中级黑马   /  2014-3-1 19:34  /  813 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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的地址吗?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
”==“ 比较的是两个对象在内存中的地址是否相同,要比较他们的值是否相同用equals.
回复 使用道具 举报
String s2 = new String("abc");

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

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

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
午夜b'Boy 来自手机 中级黑马 2014-3-1 20:01:05
板凳
String s1 = "abc"; 没用new关键字,存在常量池中。String s2 = new String("abc");使用new关键已字,存在堆内存中,返回false
回复 使用道具 举报
java--周群 发表于 2014-3-1 19:59
String s2 = new String("abc");

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

谢谢,知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马