黑马程序员技术交流社区

标题: 关于String类的问题 [打印本页]

作者: 范晓冲    时间: 2014-1-13 10:30
标题: 关于String类的问题
本帖最后由 范晓冲 于 2014-1-14 10:55 编辑
  1. public class StringDes130101{
  2.                 public static void main(String[] args){
  3.                                 String s1="abc";
  4.                                 String s2=new String("abc");        
  5.                                 //毕老师说s1和s2的区别是:
  6.                                 /*
  7.                                   s1在内存中有1个对象,==>这一句理解
  8.                                   s2在内存中有2个对象,==>这一句不太明白,能否详细解释一下?谢谢
  9.                                 */
  10.                 }        
  11. }
复制代码

作者: 不冬眠的蚂蚁    时间: 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"。下面用画图来说明更好些。

作者: 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