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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s1 = new String("abc");

String s2 = new String("abc");

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

7 个回复

倒序浏览
应该是创建了一个对象,因为常量池中已经有“abc”这个对象了。
回复 使用道具 举报
应该是创建了一个对象
回复 使用道具 举报
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
回复 使用道具 举报
明月刀割芳草 发表于 2015-7-27 12:56
public class Test1 {
        public static void main(String[] args) {

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

“abc”好像是创建了两次
回复 使用道具 举报
大爱卓生 发表于 2015-7-29 13:47
凡是new的都是在堆里面新开辟空间,没有new的都在常量池里(有就引用,没有就创建。) ...

这句总结的到位!!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马