标题: String s = new String("xyz");创建了几个String Object? [打印本页] 作者: fei_xiong 时间: 2014-4-28 17:36 标题: String s = new String("xyz");创建了几个String Object? String s = new String("xyz");创建了几个String Object?
最后这个string Object 是什么意思,是字符串类吗?作者: @文瑞 时间: 2014-4-28 17:54
两个,一个是"xyz",还有一个是new 出来的string object 作者: iloveyou 时间: 2014-4-28 18:15
Java内存当中有这么几个部分:
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。
堆:存放所有new出来的对象
常量池:在堆中分配出来的一块存储区域,(1)存放储显式的String常量和基本类型常量(float、int等)。(2)可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。
分析如下:
String a = "xyz";①
String b = "xyz";②
分析:
①代码执行后在常量池(constant pool)中创建了一个值为xyz的String对象,②执行时,因为常量池中存在"xyz"所以就不再创建新的String对象了。
String c = new String("xyz");①
String d = new String("xyz");②
分析
①Class被加载时,"xyz"被作为常量读入,在常量池里创建了一个共享的值为"xyz"的String对象;然后当调用到new String("xyz")的时候,会在堆里创建这个new String("xyz")对象;②由于常量池中存在"xyz"所以不再创建"xyz",然后创建新的new String("xyz")。
String ss1 = new String("xyz"); //创建二个对象(常量池和堆中),一个引用
String ss2 = new String("xyz"); //创建一个对象(堆中),并且以后每执行一次创建一个对象,一个引用