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

来源:互联网 发布:教务系统的数据库设计 编辑:程序博客网 时间:2024/05/21 06:21

                       看到一个面试题说是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不同。

阅读全文
0 0
原创粉丝点击