java的String类中两种对象实例化的区别

内容摘要
区别:直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以
文章正文

区别:

直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。

构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern()方法手工入池。

java相关视频教程推荐:java视频教程

直接赋值:

08827364463b542c76a6b5b975b93b1.png

常量优化机制:

String类的设计使用了共享设计模式。

在JVM底层实际上会自动维护一个对象池(字符串对象池),如果现在采用了直接赋值的模式进行String类的对象实例化操作,那么该实例化对象(字符串内容)将自动保存到这个对象池之中。

如果下次继续使用直接赋值的模式声明String类对象,此时对象池之中如若有指定内容,将直接进行引用;

如若没有,则开辟新的字符串对象而后将其保存在对象池之中以供下次使用所谓的对象池就是一个对象数组(目的就是减少开销)

构造方法赋值:

类对象使用构造方法实例化是标准做法。

String str = new String("hello");

通过分析可知,如果使用String构造方法就会开辟两块堆内存空间,并且其中一块堆内存将成为垃圾空间。除了这一缺点之外,也会对字符串共享产生问题。

因此,一般会采取直接赋值的方式。

代码注释
[!--zhushi--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!