常问
创建对象个数不同 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 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。