码迷,mamicode.com
首页 > 其他好文 > 详细

String学习

时间:2018-10-29 02:03:43      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:常用   ide   class   开始   分享图片   地址   code   src   test   

最近一直在复习以前的java基础知识,感觉有些东西都忘记了

String可以说是一个很常用的类了,现在记录一下它的原理

String(java.lang.String)

关于String对象创建的问题

    @Test
    public void StringTest() {
        String str1 = "123";
        String str2 = "123";
        String str3 = new String("123");
        System.out.println(str1 == str2);
        System.out.println(str2 == str3);
    }
技术分享图片
true
false
运行结果

 

解析:

 String str1 = "123";
JVM会在常量池里查找是否有"123",没有就创建,有就不创建,并把地址返回给str1。因为刚开始常量池里没有,所以会创建。
String str2 = "123";
常量池粒已经有"123"了,所以不会创建对象,直接把常量池的中"123"的地址返回给str2。因此str1 == str2 结果是true
String str3 = new String("123");

先去常量池中查找有没有"123",因为已经存在所以不创建,但是因为这里是new所以会在中创建"123"对象并且把堆中对象的地址返回给str3。
要注意这里返回的地址不是常量池中的是堆中的。因此str2 == str3 false

那么上面的代码创建了几个对象呢?

答案是2个,执行str1创建了一个,str3创建了一个。如果把String str3 = new String("123"),改成String str3 = new String("666"),答案就变成了创建了3个对象。因为常量池

中还创建了一个。

 

String学习

标签:常用   ide   class   开始   分享图片   地址   code   src   test   

原文地址:https://www.cnblogs.com/amberbar/p/9864075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!