黑马程序员技术交流社区

标题: 求教:String和new String 问题 [打印本页]

作者: D.reamJA    时间: 2014-10-20 07:55
标题: 求教:String和new String 问题
本帖最后由 D.reamJA 于 2014-10-20 08:23 编辑
  1. String  s1="abc";
  2. String  s2="abc";
  3. String  s3=new String("abc");
复制代码

我自己理解的,但是不知道对不对,请各位指教。
首先s1在堆内存中创建了一个对象,然后去常量池查找adc,有就直接在对象中引用,没有就在常量池写一个adc。
s2先去常量池查找adc,发现有值。然后直接引用s1在堆内存中的对象。
s3先创建一个String对象,然后查找常量池中的值,发现有adc,然后再新创建的String对象中,引用s1对象的地址.

我这么理解对么??




作者: 游客也爱学    时间: 2014-10-21 00:52
你看一下我的这个例子,和你的差不多,
问这两句话有什么区别?
String s="abc";//这句话是在字符串常量池中创建一个字符串对象,并把S引用成为一个变量
String s1=new String("abc");//这句话是在堆内存中用new的方式创建两个对象,因为一个是用new的,另一个是作为参数传进来的
答:上面是在常量池中创建一个对象,而下面创建两个对象,一个new出来的对象,一个字符串对象在堆内存中
还有你的s2是直接去常量池中找那个常量的,因为,在创建之前会判断常量池中是否有值,总结的不好,仅供参考
作者: HM2014nuli    时间: 2014-10-21 08:40
纠正一下是“abc”,s2那你理解对了,至于s3它先在堆内存里创建一个对象,再把abc的引用指向堆内存里刚new出来的对象。纯属个人理解,个人认为是对的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2