这两种到底什么区别

这两种到底什么区别

String str1="***";和String str1=new String("***");到底是什么区别?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
初一 2019-04-30 10:01:55

同学你好~~

第一种是直接赋值,第二种String new他们的区别:

new 出来的字符串地址值不同存储在堆中,而String a = "ABC"; 直接引用的存储在栈中,会去常量池中找,找到了就直接引用,找不到的话就重新创建一个再引用,如果还有String b= "ABC"; ,则还是直接引用的常量池中a创建的那个。而new的话,每次new都会创建一个新的对象, 对于相等的字符串,在常量池中永远只有一份,在堆中有多份.

什么意思呢比如:

String str1 = new String("ABC");

String str2 = new String("ABC");

str1 == str2 的值是True 还是False呢? False.

 

String str3 = "ABC";

String str4 = "ABC";

String str5 = "A" + "BC";

str3 == str4 的值是True 还是False呢? True.

str3 == str5 的值是True 还是False呢? True.

 

在写代码的时候,一般不要 String str2 = new String("ABC");

 

String a = "ABC";

String b="AB";

String c=b+"C";

System.out.println(a==c); false

a和b都是字符串常量所以在编译期就被确定了!

而c中有个b是引用不是字符串常量所以不会在编译期确定。

而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.

如果解决了你的疑惑,请采纳,祝学习愉快~~


  • 提问者 宁博闻 #1
    您好,是不是能理解为:用new创建String的堆存储地址每一个都不同,且平时不建议使用,但直接赋值的常量字符串,相互调用也不等于直接赋值,而且只要内容相同,在栈中的存储地址就是一样的,是吗?
    2019-04-30 11:26:37
  • 初一 回复 提问者 宁博闻 #2
    是的同学,同学理解没有问题! 注意:String c=b+"C"; b+"C"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c System.out.println(a==c); false 如果解决了你的疑惑,请采纳,祝学习愉快~~
    2019-04-30 13:40:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师