我读了很多关于String Literal vs String Object的内容。我读到String literal存储在String池中,String对象将在堆中创建一个对象。我在使用“”初始化的类的实例变量中很困惑。
class A {
private String aStr = "ASTRING";
}
将aStr
添加到String池中还是会在堆中创建一个对象?
答案 0 :(得分:2)
每当使用new
关键字时,就会在堆中创建对象。
这里不使用new
关键字,因此在字符串池中创建字符串对象
例如:
String s1= new String("string object");
在上面的示例中,正在创建两个对象,其中一个是string object
字符串池,因为它是双引号,另一个是s1
,它是在使用新关键字时在堆中创建的。
答案 1 :(得分:-1)
正如Gaur93所说的那样,但我想补充一点。 让我们举一个例子:
String s = "hello";
String s1 = new String("hello");
String对象基本上是字符串文字的包装器。汇集唯一的字符串对象以防止不必要的对象创建,并且JVM决定在内部汇集字符串文字。
当你使用文字时,比方说 String str =“hello” 使用池中的对象。如果使用 String str = new String(“hello”); ,则会创建一个新对象,但现有的字符串文字可以在JVM级别或字节码上重用级别(在编译时)。
您可以使用java的.equals()方法来检查。