String str="i"与 String str=new String(“i”)一样吗?

String x = "张三";
String y = "张三";
String z = new String("张三");
System.out.println(x == y); // true
System.out.println(x == z); // false

为什么会输出上边的结果呢,String x = "张三" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“张三”时,java虚拟机会先在常量池中检索是否已经有“张三”,如果有那么就将“张三”的地址赋给变量,如果没有就创建一个,然后在赋给变量;而 String z = new String(“张三”) 则会被分到堆内存中,即使内容一样还是会创建新的对象。

如果还有疑惑,可参考String s = new String("abc");产生了几个对象?

发布了30 篇原创文章 · 获赞 12 · 访问量 3479

猜你喜欢

转载自blog.csdn.net/zx1293406/article/details/90511458
今日推荐