黑马程序员技术交流社区
标题:
关于String类的问题
[打印本页]
作者:
范晓冲
时间:
2014-1-13 10:30
标题:
关于String类的问题
本帖最后由 范晓冲 于 2014-1-14 10:55 编辑
public class StringDes130101{
public static void main(String[] args){
String s1="abc";
String s2=new String("abc");
//毕老师说s1和s2的区别是:
/*
s1在内存中有1个对象,==>这一句理解
s2在内存中有2个对象,==>这一句不太明白,能否详细解释一下?谢谢
*/
}
}
复制代码
作者:
不冬眠的蚂蚁
时间:
2014-1-13 11:00
String s2=new String("abc");
堆中一个是new的结果,当然放在堆中“abc”, 常量池中一个是“abc” ,s2只是个引用 不是对象
首先在string池内找,找到?不在池内创建string对象,否则创建, 这样就一个string对象
遇到new运算符号了,在内存(堆里)上创建string对象,并将其返回给s2,又一个对象
作者:
陈星宇
时间:
2014-1-13 22:07
本帖最后由 陈星宇 于 2014-1-13 22:10 编辑
String s2=new String("abc")在堆内存中创建s2的引用,然后在字符串常量池找“abc"。下面用画图来说明更好些。
内存图.png
(80.85 KB, 下载次数: 13)
下载附件
2014-1-13 22:10 上传
作者:
mrwise1991
时间:
2014-1-13 22:45
这位同学你好,这个问题是这样的。首先,abc是个字符串没错吧,既然是字符串那么它本身就应该是存储在堆内存中的,这是一个对象;然后,我们用new新建了一个字符串对象,它的内容为参数“abc”,也可以理解为新对象是字符串“abc”的一个副本,这也是一个对象,加起来这不就是两个对象了嘛
作者:
范晓冲
时间:
2014-1-14 10:56
谢谢,谢谢版主,非常感谢:)
作者:
黄晓鑫
时间:
2014-1-14 11:26
new是一个对象 字符串又是一个对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2