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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s =new String("xyz");创建了几个String Object?二者之间有什么区别?

评分

参与人数 1黑马币 +6 收起 理由
鸭梨的生活 + 6 很给力!

查看全部评分

5 个回复

倒序浏览
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。
回复 使用道具 举报
共创建了量个一个是new  String所创建 一个是xyz字符串常量
回复 使用道具 举报
  1. public class StringDemo {

  2.         public static void main(String[] args) {
  3.                 /*String s3 = "abc";
  4.                 String s4 = new String("abc");
  5.                 System.out.println(s3==s4);//false
  6.                  
  7.                  * s3创建,在内存中只有一个对象,存在常量池中。
  8.                  * s4创建,在内存中有两个对象。先在堆中开辟一个空间,调用构造函数,调用了常量池中的"abc"对象。最后堆里有一个对象,常量池中有一个对象*/
  9.                                 
  10.                 String s1 = new String("abc");
  11.                 String s2 = "abc";
  12.                 System.out.println(s1==s2);//false
  13.         }

  14. }
复制代码

把String s1 = new String("abc");和String s2 = "abc";顺序倒过来,根据字符串可以共享,如果常量池中有"abc",s2就会直接使用。现在输出结果是false,说明s1的对象不在常量池中,在堆中。

点评

学习了 ,也就是说 无论怎样 都是两个对象 对吧  发表于 2014-5-19 16:07

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报
张鹏宇 来自手机 中级黑马 2014-5-19 12:04:13
报纸
一个吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马