标签:常量池 数据 print str style abc void pre static
不定期更新
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 */ }
标签:常量池 数据 print str style abc void pre static
原文地址:https://www.cnblogs.com/chxwkx/p/11270148.html