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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡浩 中级黑马   /  2013-6-1 10:41  /  1171 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string s="abc"; 是在常量池中创建了一个对象
String s1=new String("abc");是在堆内存中创建了两个对象。
那么String s2=new String();
s2="abc";是怎么创建对象的,这个过程和常量池有关系吗?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
  1. String s2 = new String();
  2. s2 = "abc";
复制代码
对于这两行代码我是这么理解的:
new String(); 是堆内存中的对象,"abc" 是字符串常量池中的对象。
s2 先是指向堆内存中的new String();  然后又 s2 又指向常量池中的"abc"对象。
回复 使用道具 举报
石贤芝 发表于 2013-6-1 14:15
对于这两行代码我是这么理解的:
new String(); 是堆内存中的对象,"abc" 是字符串常量池中的对象。
s2 先 ...

哥们,是这样的吗?
回复 使用道具 举报
胡浩 发表于 2013-6-1 16:16
哥们,是这样的吗?

我认为应该是这样。不一定对。

s2 在栈中,可以指向不同的对象。就像如下代码:

String s2 = "abc";
s2 = "bcd";
在这里,s2 先指向"abc",再指向"bcd"一样的道理。

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