Java中的字符串 存在堆中还是栈中
Java?
堆
栈
字符串
------解决方案--------------------String s = "java";
这里"java"是存放在常量池中,而这个常量池是JVM开辟的一块特殊的内存区域,它不是栈,也不是我们创建对角存放在的那个堆。
理解了这句,相信你的问题可以自己思考出来了。
------解决方案--------------------String类是不可变类
String s = "Hello"; //--1
String s1=new String("World");//---2
方式1是申请的变量存放在常量池中的,这是java的性能优化所做的。也就是说每创建一个字符串,虚拟机就要创建一个新的对象,因为String是不可变类,因此,虚拟机做出优化,将字符串放入常量池,实现对不同字符串的引用。
第二种方法是使用new创建的对象,那么会在堆区申请内存,对于大量的这样的操作,这个开销是很大的,所以不建议使用第二种方式。
------解决方案--------------------
+1