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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂程序 中级黑马   /  2013-3-20 11:33  /  1127 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s=new String(“xyz”); 创建了几个String Object?

点评

这问题昨天才有人问过呀~  发表于 2013-3-20 15:31

5 个回复

倒序浏览
哎呀 怎么又是这个问题啊。在复制一遍。
    一般情况下,创建对象时通过new关键字创建出来的,但是有的时候会通过一个方法返回类的实例对象,比如单例模式就是通过public static Object getInstance()方法得到的对象,但是这个方法内部也是new出来对象的。所以综上一般情况下都是通过new出来对象的。但是String类确实属于比较另类的一个,因为当你String str = “xyz”;的时候就也会创建对象,但这个字符串对象会放在常量池中,供以后访问同样的字符串时调用。
    所以,String str = new String("xyz")这句代码,首先是在常量池中创建了“xyz”对象,在在堆内存中创建String对象(引用str存在栈内存中),并把常量池中对象“xyz”的引用传递给String,所以如此下来是创建了两个对象。
回复 使用道具 举报
复制答案:
String s=new String(“xyz”); 在内存中有两个对象,可以看成"xyz"和new String()
回复 使用道具 举报
两个对象...
详解:1.String是一个引用类型,即包装类,不同于基本类型,用new创建的是一个对象;
2.new String()和new String(“”)都是申明一个新的空字符串,即"xyz"的字符串可以看成是一个整体(一个字符串对象)。
String主要特点归类
回复 使用道具 举报
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
两个object,”xyz”对应一个对象,
这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它依据那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马