gpt4 book ai didi

java - 从 System.in 中读取的两个相同字符串是否会存储在一个公共(public)内存位置?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:13 25 4
gpt4 key购买 nike

假设我们有这样的程序:

import java.io.*;

public class ReadString {

public static void main (String[] args) {

// prompt the user to enter their name
System.out.print("Enter your name: ");

// open up standard input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String userName = null;
String userNameCopy = null;

// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
userName = br.readLine();
System.out.print("Enter your name once again: ");
userNameCopy = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error trying to read your name!");
System.exit(1);
}

System.out.println("Thanks for the name, " + userName);

}

} // end of ReadString class

现在,如果用户输入他的用户名两次,userNameuserNameCopy 字符串将具有相同的值。由于字符串是不可变的,Java 编译器是否足够聪明以仅使用一个内存对象和对它的两个引用,或者这种行为是否只保留给硬编码到程序中的字符串文字?

如果答案是“否,编译器将在堆上创建两个单独的对象”。为什么会这样?是因为从池中搜索完全匹配很慢吗?如果是,字符串池不能像某种哈希表或类似的东西一样实现吗?

最佳答案

池是作为散列数据结构实现的。 Java 将是否进行搜索和共享非文字 String 对象的决定留给程序员。查看字符串方法 intern() .

关于java - 从 System.in 中读取的两个相同字符串是否会存储在一个公共(public)内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15748458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com