直接赋值字符串和new有什么区别?
Strings="tt";Stringss=newString("ff");这两个有区别嘛?那么,哪一种方式在程序运行时会更快速而有效呢?当然,安全性是应该考量的...
String s="tt";
String ss= new String("ff") ;
这两个有区别嘛?
那么,哪一种方式在程序运行时会更快速而有效呢?当然,安全性是应该考量的 展开
String ss= new String("ff") ;
这两个有区别嘛?
那么,哪一种方式在程序运行时会更快速而有效呢?当然,安全性是应该考量的 展开
9个回答
展开全部
你去看一下它底层的实现就明白了 ·
对于第一种方式· java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建
第二种方式 新建一个 它首先也会去缓冲区里边查找 不管有没有 它都会在堆里新建一个 如果缓冲区里面没有 则在缓冲区里面也新建一个·
例如string s=“tt”
string s1=“tt” s等于s1
而 string s=new string(“ss”)
string s1=new string(“ss”) s不等于s1
对于第一种方式· java有一个字符串缓冲区 你新建一个的时候它会先找缓冲区里有没有这个字符串 如果有 直接返回引用 没有就在里面新建
第二种方式 新建一个 它首先也会去缓冲区里边查找 不管有没有 它都会在堆里新建一个 如果缓冲区里面没有 则在缓冲区里面也新建一个·
例如string s=“tt”
string s1=“tt” s等于s1
而 string s=new string(“ss”)
string s1=new string(“ss”) s不等于s1
展开全部
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会在堆中创建两个字符串对象, 地址值不同
直接赋值, 是从字符串常量池中取值。
例如 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会在堆中创建两个字符串对象, 地址值不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一种更快。
s是字符串常量,存在内存的数据区。
ss是对象,创建该 对象时,会生成两个对象,一个是栈区的ss,另一个是堆区的“ff”对象
s是字符串常量,存在内存的数据区。
ss是对象,创建该 对象时,会生成两个对象,一个是栈区的ss,另一个是堆区的“ff”对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个查栈里有没有以前建过的"tt",有就引用,没有就新建。
第二个每次都会在堆里新建
第二个每次都会在堆里新建
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询