字符串文字与字符串对象哈希码

时间:2017-07-11 18:24:52

标签: java string object

我读到声明为字面值的字符串是在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?

1 个答案:

答案 0 :(得分:1)

字符串文字自动"实习,"把它们放在一个池子里。这最小化了所需的实例数。因此,这两个文字使用相同的String实例。 hashCode()以一致的方式对String的内容进行操作。如果两个String实例具有相同的字符,则它们将具有相同的哈希码。