a L*_*ner 15 java string literals
Java中的任何String文字都是类型的常量对象,String并存储在String文本池中.
将String作为参数传递给方法也能保存到文本通过String文字池?
例如,当我们写,
System.out.println("Hello");
Run Code Online (Sandbox Code Playgroud)
要么
anyobj.show("Hello");
Run Code Online (Sandbox Code Playgroud)
是否String会创建"Hello"并将其存储在String文字池中?
有没有办法打印String文字池的内容?
Tom*_*icz 20
每次在代码中使用String文字时(无论在哪里),编译器都会将该字符串放在符号表中,并在每次遇到同一文件中某处的相同字符串时引用它.稍后此字符串将放在常量池中.如果将该字符串传递给另一个方法,它仍然使用相同的引用.字符串是不可变的,因此重用它们是安全的.
以此程序为例:
public class Test {
public void foo() {
bar("Bar");
}
public void bar(String s) {
System.out.println(s.equals("Bar"));
}
}
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)
有两个项目在常量池:一个用于String(#2)引用的实际字符(#19).
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |