社区
Java SE
帖子详情
String a="a";和String a=new String("a");的区别是什么?
O__________________K
2006-06-28 03:30:22
rt
...全文
4355
11
打赏
收藏
String a="a";和String a=new String("a");的区别是什么?
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
O__________________K
2006-06-29
打赏
举报
回复
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
3. Java中的数据类型有两种。基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char。存在于栈中。另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中.
String str = "abc";和String str = new String("abc");和char[] c = {'a','b','c'};String str=new String(c);都采用堆存储
String str = "abc";在栈中如果没有存放值为"abc"的地址,等同于:
String temp=new String("abc");
String str=temp;
关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
char[] c = {'a','b','c'};String str=new String(c);等同于:
String str = new String('a'+'b'+'c');
-----------------------------------------
最佳答案
For_suzhen
2006-06-28
打赏
举报
回复
呵呵,CSDN上真学东西啊
zhunzhunzhun_sky
2006-06-28
打赏
举报
回复
学习中~~~~~~~~~~~
zuichubaise
2006-06-28
打赏
举报
回复
我也顶
shpggio
2006-06-28
打赏
举报
回复
String str = "a";在栈中如果没有存放值为"a"的地址,等同于:
String temp=new String("a");
String str=temp;
关于String str = "a"的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"a"的地址,如果没有,则开辟一个存放字面值为"a"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"a"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
使用String str = "a";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("a");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
csz786
2006-06-28
打赏
举报
回复
顶
jtomcat_jack
2006-06-28
打赏
举报
回复
顶
hudingchen
2006-06-28
打赏
举报
回复
http://community.csdn.net/Expert/topic/4802/4802083.xml?temp=.2654993
晨星
2006-06-28
打赏
举报
回复
"a"已经对应一个字符串对象,
String a = "a";
只是让变量a引用到这个对象。而
String a = new String("a");
以这个已有的对象"a"为样本,构造出一个内容完全相同的另一个对象,然后让变量a引用到它。
详见《Effective Java》Item 4。
software_jianghai
2006-06-28
打赏
举报
回复
String a = "a";是一个字面量,存储在栈中;
String a = new String("a"); 创建一个对象,对象的内容是"a",引用a存储在栈中,引用a所指的那个对象存在堆中,
FreezeCS
2006-06-28
打赏
举报
回复
String a = new String("a") 就是在内存重新划出一块来放“a"
String a = "a" , 如果内存里面有a了,就不划内存了,就把它指向那个存在的”a"那里。
是这样吧?
基于Spring Boot+Vue的线上宠物商城设计与实现源码.zip
基于Spring Boot+Vue的线上宠物商城设计与实现源码.zip
资产清查损溢认定表.xlsx
资产清查损溢认定表.xlsx
AI 驱动的一站式智能电商系统
这个是AI 自动生成的代码
Java实现国密SM4算法:ECB、CBC、CTR、OFB、CFB五种分组加解密模式详解
本资料汇集了在国密算法应用实践中形成的系统性技术总结。这些内容源于实际项目经验,旨在为相关领域的研究与开发工作提供参考。通过具体案例分析与技术要点归纳,本资料详细阐述了算法实现过程中的关键环节与注意事项,涵盖了从基础原理到实际部署的全流程技术细节。 在内容组织上,本资料采用模块化结构,每个技术单元均包含理论说明、实现步骤及验证方法。对于已获取本系列任一技术文档的用户,可依据相应流程获取关联资料。所有技术论述均经过实际环境验证,力求在保持学术严谨性的同时突出实用价值,为密码技术应用提供切实可行的实施方案参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
3HAC025090-001_rev04.pdf
ABB工业机器人手册
Java SE
62,628
社区成员
307,259
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章