String string=new String("wangjun")一共创建了几个对象详解

版权声明:个人随笔,只为保存文档,希望能对你有帮助,如需转载、修改请保留本人CSDN链接! https://blog.csdn.net/w893932747/article/details/86183226

首先,分析这个问题从两方面:

一:堆内存

二:常量池

总结:如果有new关键字两个方面都分析,如果没有,只判断常量池就可解决问题。

分以下几种情况:

1,String str = "ab";

该语句创建对象的过程:先在常量池中查找是否有内容为"ab"的字符串对象,若有,直接将该对象的引用赋给str;若没有,则在常量池中创建"ab"对象,再将其引用赋给str。因为没有new关键字,所以操作的只有常量池。

2,String str = new String("ab");

该语句创建对象的过程:分两种情况,

  1. 先在常量池中查找是否有内容为“ab“的字符串对象,若有,直接将该对象的引用赋值给str;若没有,则在常量池中创建”ab“对象,再将其引用给str。
  2. 这里有new关键字,所以它会在堆内存中开辟空间,每次new的堆内存地址都不同。
  3. 所以这个要分两种情况去区分,不要单纯的以为就是两个对象

3,String str = new String("a"+"b");

这个地方有坑,javac编译时,会对其优化,变成"ab",不必等到运行期去进行加法运算处理。所以ab是一个对象,其他的就和上边的同理了。

4,String s = new String("a")+b;

分情况,new String("a")可能一个或两个,+b可能一个或没有, new String("a")+b一个,所以两到四个对象。

猜你喜欢

转载自blog.csdn.net/w893932747/article/details/86183226
今日推荐