一、String str = "abc";
这种方式在堆区开辟空间,“abc”存储在字符串池中,在栈区创建变量str指向“abc”,当我们再次创建变量String str1 = “abc”时,JVM会到字符串池中寻找“abc”,找到后将引用赋值给str1,不会再次开辟空间创建“abc”;
二、String str = new String("abc");
这种方式首先在堆区开辟空间存储“abc”,然后再在堆区开辟空间创建字符串的对象,将“abc”赋值给字符串对象,最后将对象的引用赋值给str变量,当我们再次创建变量String str1 = “abc”时,JVM会重复执行前面的动作;
第二种方法很耗内存,且运行速度慢,一般情况下采用第一种方法,不允许采用第二种方法。