Java中的任何字符串文字都是类型为String
的常量对象,并存储在字符串文字池中。
作为参数传递给方法的String
字面值也会被存储在String
字面值池中吗?
例如,当我们编写以下代码时:
System.out.println("Hello");
或者
anyobj.show("Hello");
在字符串常量池中,是否会创建并存储字符串“Hello”?
有没有办法打印出字符串常量池的内容?
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
常量池中有两个条目:一个是字符串(#2
),它引用了实际的字符(#19
)。
javap
命令打印出.class文件中符号表中的所有字符串字面量。它将列出代码中使用的字符串字面量。 - nhahtdh