关于String str="abc"与String str= new String("abc")区别

                       看到一个面试题说是String str1="abc"与String str2="abc"打印 str1==str2的结果,结果搞错了惊恐下面说明下这个问题,先看下代码

                     

                String str1 = "abc";
		String str2 = "abc";
		
		System.out.println(str1==str2);
		
		System.out.println("====================分割线=====================================");
		
		String str3 = new String("abc");
		String str4 = new String("abc");
		  
		System.out.println(str3==str4);

                       测试结果如下

                     



                    解释下原因,第一个true是因为,String是final的,他存储在方法区的常量区,看下图

                       

                      

                  显然“abc”在常量区只有一份,所以在多的引用,都是指向内存中同一个地址,所以结果是true


               但如果是new 一个String对象呢,结果就会有所不同,此时在堆区会有一个对象被创建,如下图


              


                         从图中可以看出使用new 创建字符串时,会在堆区(heap)创建一个对象,它们都会引用常量区的一个字符串,所以,str3和str4不同。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值