这是以前刚学Java那会经常被问到的问题,并且也会经常出现在面试中。这个问题不仅仅只局限于Java,可以适用于其他大部分语言,正好最近有个小朋友在学编程,特此整理一下。
String s1 = "abc" ;
String s2 = new String("abc");
首先,我们先看看以上两句分别做了什么?
String s1 = “abc” 做了什么
- 在栈中创建了一个名为 s1 的变量(引用)
- 如果 String池 中没有 “abc” 存在,则在常量池中创建一个 String 类型的 “abc” 对象,有就不创建
- 将 “abc” 的地址赋给 s1
所以,此句到底创建了几个对象,根据 “abc” 的情况而定,“abc” 之前存在就是一个,否则就没有创建。