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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李杰 初级黑马   /  2012-8-28 14:41  /  1328 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看下面代码
  1. String a=new String ("abc");
  2.                 String b="abc";
  3.                 System.out.println(a==b);
复制代码
为什么是false;不是内存已经存在“abc”了吗?

评分

参与人数 1黑马币 +30 收起 理由
张_涛 + 30

查看全部评分

4 个回复

倒序浏览
String a=new String ("abc");   abc在对象中
String b="abc"; 在String的池中

对象比当然是false  如果你这样
String a="abc", b="abc";     a==b 就是true

接着如果
String a=new String("abc");
String b=new String("abc");
  a==b 就是flase  、、、  对象
  a.equals(b)  就是true、、、、值

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String a=new String ("abc");  //new String("abc")创建了一个对象,变量a指向它

String b="abc";  //变量b指向字符串池中的字符串对象“abc”

System.out.println(a==b);  //因为a和b指向不同的对象,故结果为false

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:


     String str = "abc";
等效于:


     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
上面是JDK API中的内容,也就是说字符串和字符数组的引用都代表一个地址楼主的引用中
String a=new String ("abc"); //指向一个地址0x0039
String b="abc";//指向另一个地址0x0040
a 和 b的值当然不同。
而且字符串是常量,不同与基本数据类型的常量定义。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人回帖,赞一个!

查看全部评分

回复 使用道具 举报
额,回答过一次这个问题。不过不小心把String Pool拼写错了。
http://bbs.itheima.com/forum.php ... mp;page=1#pid135707
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马