jvm总结
Posted chxwkx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm总结相关的知识,希望对你有一定的参考价值。
总结工作中遇到的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总结的主要内容,如果未能解决你的问题,请参考以下文章