黑马程序员技术交流社区

标题: String s =new String("xyz");创建了几个String Object [打印本页]

作者: 小小6456    时间: 2014-5-18 20:57
标题: String s =new String("xyz");创建了几个String Object
String s =new String("xyz");创建了几个String Object?二者之间有什么区别?
作者: 张斌    时间: 2014-5-18 21:52
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。
作者: alax    时间: 2014-5-19 05:57
共创建了量个一个是new  String所创建 一个是xyz字符串常量
作者: 铁血丹心    时间: 2014-5-19 09:06
  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 12:04
一个吧?




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