String a ="aa"与String a = new String("aa")之间的区别

String a = “aa”;这句话执行过程是:
到常量池中寻找“aa”,
1.如果存在,则直接将“aa”对象的地址传递给a;
2.如果不存在,则在常量池中创建“aa”,然后将地址传递给a.

String a = new String(“aa”);执行过程是:
首先在堆内存中创建对象“aa”,
然后在常量池中寻找“aa”,
1.如果存在,啥事不做;
2.如果不存在,在常量池中创建“aa”对象;

总结可见;直接赋值形式的新建string对象是从常量池中拿数据;最多创建一个string对象,虽少创建0个string对象;
new形式新建string对象无论怎样会首先在堆内存中创建一个string对象,然后确保常量池中也有一个相同内容的string对象;最多创建2个,最少创建1个。

由于直接赋值方式可能节约内存,推荐使用该方式。

猜你喜欢

转载自blog.csdn.net/qq_24699905/article/details/85616477