String类型new与不new的区别
程序员文章站
2022-06-17 10:14:23
附:String用new与不new的区别String str1=“ABC”:可能会创建一个或不创建对象:如果常量池中有“ABC”,则不创建对象,直接指向那个地址,如果没有,则在常量池中创建一个新的值为“ABC”的对象。String str2 = new String(“ABC”):一定会创建一个对象,可能创建两个对象:先在堆中开辟一个空间,将那个空间的地址给str2(创建了第一个对象),然后取常量池中,看有无“ABC”,如果有,则将这个地址给堆中开辟的空间,如果没有,则新建一个值为“ABC”的对象(创建...
附:String用new与不new的区别
String str1=“ABC”:可能会创建一个或不创建对象:如果常量池中有“ABC”,则不创建对象,直接指向那个地址,如果没有,则在常量池中创建一个新的值为“ABC”的对象。
String str2 = new String(“ABC”):一定会创建一个对象,可能创建两个对象:先在堆中开辟一个空间,将那个空间的地址给str2(创建了第一个对象),然后取常量池中,看有无“ABC”,如果有,则将这个地址给堆中开辟的空间,如果没有,则新建一个值为“ABC”的对象(创建了第二个对象),将这个新创建的对象给堆中开辟的那个空间。
即str1中存的是堆中分配的空间,堆中分配的空间中存的是字符串常量池中分配空间存放”ABC”的空间的地址值。而str2中之间存的是字符串常量池中分配空间存放”ABC”的空间的地址值。
https://blog.csdn.net/zhouhuocleverset/article/details/61935578
public static void main(String[] args) {
String str1=new String("ABC");
String str2=new String("ABC");
System.out.println(str1==str2);//false
String str3 = "ABC";
String str4 = "ABC";
String str5 = "AB" + "C";
System.out.println(str3 == str4); //true
System.out.println(str3 == str5); // true
String a = "ABC";
String b = "AB";
String c = b + "C";/*此时创建了一个StringBuffer对象,来拼接b和"C",
然后调用toString方法,生成一个新的String对象*/
System.out.println(a==c);//false 此时c是引用变量
c = c.intern();//如果c在常量池中,直接返回,如果不在,把值放到常量池,
System.out.println( a == c );//true 所以此时a和c都是指向常量池中的值
String d="abc2";
String e="abc";
String f=d+2;
String g=d+2;
System.out.println(f==g);//false
System.out.println(d==f);//false
/*f,g都是引用变量,而d,e都是常量池中的变量*/
}
所以在平时用String s1=“abcd”这种方式更好,因为new一定会创建一个新的对象,一定会占用新的空间。
参考 https://blog.csdn.net/u013759354/article/details/88849815
本文地址:https://blog.csdn.net/weixin_44847031/article/details/110249936
上一篇: print不自动换行,puts会自动换行第1/2页
下一篇: 网络性能应用检测系统
推荐阅读
-
C#中new的用法及与override的区别分析
-
PHP的new static和new self的区别与使用
-
PHP中new static()与new self()的区别异同分析
-
C#中new的用法及与override的区别分析
-
C++用new与不用new创建对象的区别
-
JS中‘hello’与new String(‘hello’)引出的问题详解
-
PHP的new static和new self的区别与使用
-
php new static与new self 的区别
-
PHP中new static()与new self()的区别异同分析
-
Arrays.asList返回的List与new ArrayList的区别