Java 中的任何字符串文字都是 String
类型的常量对象,并存储在字符串文字池中。
作为参数传递给方法的 String
文字是否也会存储在 String
文字池中?
比如我们写的时候,
System.out.println("Hello");
或
anyobj.show("Hello");
String
"Hello"是否会被创建并存储在 String
文字池中?
有什么办法可以打印String字面量池的内容吗?
最佳答案
每次您在代码中使用字符串文字时(无论在何处),编译器 都会将该字符串放入符号表中,并在每次在同一文件中的某处遇到相同字符串时引用它.稍后这个字符串会被放入常量池中。如果将该字符串传递给另一个方法,它仍然使用相同的引用。字符串是不可变的,因此可以安全地重用它们。
以这个程序为例:
public class Test {
public void foo() {
bar("Bar");
}
public void bar(String s) {
System.out.println(s.equals("Bar"));
}
}
用javap -c -verbose
反编译后,你会发现如下内容:
const #2 = String #19; // Bar
//...
const #19 = Asciz Bar;
public void foo();
//...
1: ldc #2; //String Bar
public void bar(java.lang.String);
//...
4: ldc #2; //String Bar
常量池中有两个条目:一个用于String
(#2
) 引用实际字符(#19
)。
关于java - 字符串文字作为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169641/