java - 字符串文字作为方法的参数

标签 java string literals

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/

相关文章:

lisp - Lisp 中的 (list nil) 和 '(nil) 有什么区别?

java - WebRowSet 的问题

java - 调整大小功能时遇到问题

URL哈希参数的Javascript字符串压缩

python - 在 python 中拆分字符串

switch-statement - 打开一个字节

javascript - 使用 Javascript 设置 ASP 文字文本

java - 桌面程序与服务器通信

java - Selenium 无法检测 SAP 表内的颜色

java - 检查字符串是否仅包含特定数字(例如 "111")