String str="abc";和String str = new String("abc");的区别

2,984 阅读1分钟

String str ="abc"原理

String str ="abc"的原理,采用字面值的方式创建时,JVM会先去字符串常量池中去查找是否存在"abc"这个对象,如果不存在就创建这个字符串,并把地址返回给str。如果存在则直接把"abc"这个字符串的地址返回给str

        String x = "abc";
        String y = "abc";
        System.out.println(x==y);//结果为true


String str = new String("abc")原理

String str = new String("abc")采用new关键字的方式创建,JVM也会去字符串常量池中查找有没有这个字符串,如果没有的话,就先在字符串常量池里创建"abc"这个字符串,然后再复制一份放在堆里并把地址返回给str。如果字符串常量池里存在该字符串,那么就直接复制一份放在堆里并把地址返回给str

        String x = new String("abc");
        String y = new String("abc");
        System.out.println(x == y);//结果为false


String str="abc"String str = new String("abc")的区别总结为:

  • 创建对象个数不同
    • String str="abc"只在字符串常量池里创建一个对象。(如果字符串常量池里有"abc",则一个都不创建直接返回地址值给str
    • String str = new String("abc")在堆内存和字符串常量池各创建一个对象。(如果字符串常量池里有"abc",则只在堆内存创建对象并返回地址值给str