多语言展示
当前在线:159今日阅读:113今日分享:31

JAVA中字符串直接初始化与New的区别

内存管理是JAVA开发者的进阶的必经之路,那么Java中的字符串初始化时,New与直接赋值有什么区别呢?下面小编做一个详细讲解。
方法/步骤
1

首先,如图所示,创建了个4个字符串对象分别为a、b、c、d,ab为直接赋值,cd为New出的对象。

2

这里我们做一个判断,Java中字符串做等号“=”判断,其实是地址判断,如果一致则为true,否则为false。

3

运行结果如图,显然,只有ab的地址是相同的,下面介绍一下原理。

4

Java在编译运行时,存在一个常量池,直接赋值会将数据保存于常量池中,如图所示,当程序运行到a时,值 "" 与地址 1 存于常量池中。

5

而党程序运行到b时由于值是“”,以及存于常量池,故不再新创地址存储,而是直接将b视作a的副本。

6

如图所示,当运行到c的时候,由于new String(“”),所以开辟了一个新的String对象空间,程序并没有访问常量池。

7

当运行到d的时候,同样new String(“”),又开辟了一个新的String对象空间,同理程序依旧没有访问常量池。总而言之,对于Java的字符串而言,尽量避免New可以有效节省内存空间。

推荐信息