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

jvm总结

时间:2019-07-30 15:42:23      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:常量池   数据   print   str   style   abc   void   pre   static   

总结工作中遇到的JVM知识

不定期更新

 1.有关创建字符串时到底创建几个对象,创建的字符串引用比较。

 

    public static void stringTest() {
        //创建两个变量,一个放入常量池中的"abc",一个是堆中的a
        String a = new String("abc");
        //创建一个对象,堆中的b
        String b = new String("abc");
        //直接拷贝的常量池中的"abc"对象,所以没有创建
        String c = "abc";
        //同上
        String d = "abc";
        
        //说明不是从常量池中取得的对象a=="abc" false
        System.out.println("a==\"abc\" " + (a=="abc"));
        //说明new一个String()总会(最少)创建一个新的对象a==c false
        System.out.println("a==c " + (a==c));
        //说明,即便有new过相同的字符串,也不会把常量池的引用拷贝过来,new就是创建新的对象b=="abc" false
        System.out.println("b==\"abc\" " + (b=="abc"));
        //同上b==c false
        System.out.println("b==c " + (b==c));
        //说明也不会将已经存在的常量池的引用拷贝过来b==a false
        System.out.println("b==a " + (b==a));
        //直接赋值的情况下,是将常量池的引用拷贝过来c==d true
        System.out.println("c==d " + (d==c));
        //同一个引用c=="abc" true
        System.out.println("c==\"abc\" " + (c=="abc"));
        /**
         * 在java中,堆保存对象,栈保存相应的数据。所以可以看出,String a = new String("abc");是创建了两个对象的,一个是"abc",保存在常量池中。
         * 一个是a引用。而后面的String b = new String("abc");其实只创建了一个对象,"abc"已经存在常量池了,就没有创建,只创建了一个b
         */
    }

 

jvm总结

标签:常量池   数据   print   str   style   abc   void   pre   static   

原文地址:https://www.cnblogs.com/chxwkx/p/11270148.html

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