直接赋值字符串和new有什么区别?

Strings="tt";Stringss=newString("ff");这两个有区别嘛?那么,哪一种方式在程序运行时会更快速而有效呢?当然,安全性是应该考量的... String s="tt";
String ss= new String("ff") ;
这两个有区别嘛?
那么,哪一种方式在程序运行时会更快速而有效呢?当然,安全性是应该考量的
展开
 我来答
失落间谍
推荐于2017-11-25 · TA获得超过172个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:129万
展开全部
你去看一下它底层的实现就明白了 ·
对于第一种方式· java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建
第二种方式 新建一个 它首先也会去缓冲区里边查找 不管有没有 它都会在堆里新建一个 如果缓冲区里面没有 则在缓冲区里面也新建一个·

例如string s=“tt”
string s1=“tt” s等于s1
而 string s=new string(“ss”)
string s1=new string(“ss”) s不等于s1
vc1100
2012-12-05 · TA获得超过169个赞
知道小有建树答主
回答量:166
采纳率:100%
帮助的人:127万
展开全部
new关键字会产生两个新的对象,一个在堆中,一个在对象池中,简而言之就是肯定会产生一个新对象,而直接赋值的话JVM会首先在对象池中查找有没有同样的字符串,如果有的话就直接让它指向该字符串,如果没有就会new一个。建议多研究下Java内存机制。
直接赋值的方式更有利于减小内存的开销。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
育知同创教育
2018-08-02 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
new,会在java的堆内存中创建对象, 有几个new就有几个对象。
直接赋值, 是从字符串常量池中取值。
例如 String str1 = "a"; String str2 = "a"; System.out.println(str1==str2);结果为true,地址值
都是字符串长量池中的"a".
String str3 = new String("a");String str4 = new String("a");System.out.println(str3==str4);
结果为false. 应为new会在堆中创建两个字符串对象, 地址值不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友27e209e
2012-12-06 · TA获得超过390个赞
知道小有建树答主
回答量:193
采纳率:0%
帮助的人:109万
展开全部
第一种更快。
s是字符串常量,存在内存的数据区。
ss是对象,创建该 对象时,会生成两个对象,一个是栈区的ss,另一个是堆区的“ff”对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
peterdyf
2012-12-05
知道答主
回答量:12
采纳率:0%
帮助的人:9.8万
展开全部
第一个查栈里有没有以前建过的"tt",有就引用,没有就新建。
第二个每次都会在堆里新建
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式