黑马程序员技术交流社区

标题: 字符串问题,创建了多少对象 [打印本页]

作者: lizf2010    时间: 2015-7-27 12:08
标题: 字符串问题,创建了多少对象
String s1 = new String("abc");

String s2 = new String("abc");

创建s1的时候创建了两个对象,将"abc"对象传递给了s1的new String的对象,那么在创建s2的时候呢,又有新的"abc"创建了?还是直接把前面的"abc"传递给s2呢

作者: libin    时间: 2015-7-27 12:15
应该是创建了一个对象,因为常量池中已经有“abc”这个对象了。
作者: 疯狗码农    时间: 2015-7-27 12:22
应该是创建了一个对象
作者: 明月刀割芳草    时间: 2015-7-27 12:56
public class Test1 {
        public static void main(String[] args) {

      String s1 = new String("abc");

        String s2 = new String("abc");
        System.out.println(s1==s2);
        }
}

结果为flase
表明两个字符串的地址不同,所以是新的"abc"创建了

s2是new了一个新的。
如果写成String s1="abc";
            String s2="abc";
那么s1==s2
作者: lizf2010    时间: 2015-7-29 11:11
明月刀割芳草 发表于 2015-7-27 12:56
public class Test1 {
        public static void main(String[] args) {

s1,s2肯定是不相同的,我是说"abc"这个对象也是创建了两次吗
作者: 大爱卓生    时间: 2015-7-29 13:47
凡是new的都是在堆里面新开辟空间,没有new的都在常量池里(有就引用,没有就创建。)
作者: lizf2010    时间: 2015-7-30 10:53
大爱卓生 发表于 2015-7-29 13:47
凡是new的都是在堆里面新开辟空间,没有new的都在常量池里(有就引用,没有就创建。) ...

“abc”好像是创建了两次
作者: henghenghalala    时间: 2015-7-30 11:04
大爱卓生 发表于 2015-7-29 13:47
凡是new的都是在堆里面新开辟空间,没有new的都在常量池里(有就引用,没有就创建。) ...

这句总结的到位!!:)




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