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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s = new String("xyz");创建了几个String Object?
最后这个string Object 是什么意思,是字符串类吗?

点评

认真把毕老师Java基础视频中的String类看掉!!!  发表于 2014-4-28 20:25

3 个回复

倒序浏览
两个,一个是"xyz",还有一个是new 出来的string object
回复 使用道具 举报
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");     //创建一个对象(堆中),并且以后每执行一次创建一个对象,一个引用

String   s1   =   "xyz";     //创建一个对象(常量池中),一个引用   
String   s2  =   "xyz";     //不创建对象(共享上次常量池中的数据),只是创建一个新的引用

祝学习愉快!

图像 1.jpg (117.32 KB, 下载次数: 6)

内存分析图

内存分析图

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马