我读到声明为字面值的字符串是在String Constant Pool上创建的
questions = [{"question":"","type":"text","conditions":null,"isSub":false,"subQ":[]}]
path = '[0]'
//returns [undefined x 1]
function deleteQuestion(path){
const { questions } = this.state
_.pullAt(questions, path)
this.setState({questions: questions})
}
String s1 = "Hello";
- >这不会创建新对象,而是引用s1引用。
使用new关键字声明的字符串在Heap Memory和String Constant Pool上创建
String s2 = "Hello";
- >这将在堆中创建一个新对象。
但它会在字符串常量池中创建一个新常量,还是会使用s1中的常量?
我有以下代码。 所有s1,s2和s3的哈希码都返回相同。
String s3 = new String("Hello");
我明白public class question1 {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
System.out.println(s1 == s2);
System.out.println(s1 == s3); // not sure why false result, s3 will create a separate constant in the pool? There is already a constant with value "Hello" created by s1. Please confirm if s3 will again create a constant.
}
}
比较对象。
字符串常量池中是否定义了两个“Hello”,一个来自s1,一个来自s3?
答案 0 :(得分:1)
字符串文字自动"实习,"把它们放在一个池子里。这最小化了所需的实例数。因此,这两个文字使用相同的String实例。 hashCode()以一致的方式对String的内容进行操作。如果两个String实例具有相同的字符,则它们将具有相同的哈希码。