如果是String x = "abc";编译器首先会在常量池中寻找有没有"abc"这个字符串,如果有则直接从常量池中取,不会new,如果常量池中没有,则会new一个,并将"abc"存放到常量池中。
而String x= new String( "abc");则编译器直接new一个字符串,不会到常量池中查询。
所以:
String x1= "abc";
String x2= "abc";//x1是"abc",常量池中已经有了"abc",所以x2直接从常量池中取
String x3 = new String("abc");
String x4 = new String("abc");
System.out.println(x1 == x2);//true
System.out.println(x2 == x3);//false
System.out.println(x3 == x4);//false
String x = "abc" 和 String x = new String("abc")有什么区别?
最新推荐文章于 2024-07-22 16:19:31 发布
本文详细解析了Java中字符串常量池的工作原理。通过具体的代码示例,展示了当使用直接赋值与new关键字创建字符串时,常量池是如何处理这些操作的。这有助于理解字符串对象的内存分配和引用比较。
444

被折叠的 条评论
为什么被折叠?



