欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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”的对象(创建了第二个对象),将这个新创建的对象给堆中开辟的那个空间。

String类型new与不new的区别

即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

相关标签: Java