常问
创建对象个数不同 String str="abc"只在字符串常量池里创建一个对象。(如果字符串常量池里有"abc",则一个都不创建直接返回地址值给str)String str = new String("abc")在堆内存和字符串常量池各创建一个对象。(如果字符串常量池里有"abc",则只在堆内存创建对象并返回地址值给str)
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)作者:Kawasaki_MZDA 链接:https://juejin.cn/post/6844903984323362829 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。