Home > Java > javaTutorial > body text

Why does \'new String()\' create a new object, even if a string with the same value already exists in the String constant pool?

Patricia Arquette
Release: 2024-11-03 05:58:30
Original
254 people have browsed it

Why does

String Constant Pool: Understanding Interning and the "new" Operator

In Java, string literals, such as "abc," are interned, meaning they are stored in the String constant pool, and references to them are shared. However, when a new String object is created using the "new" operator, a new object is created in memory rather than referencing an existing one in the pool.

Conflicting statements regarding this behavior have led to misunderstandings. While the JVM checks for existing strings in the pool when encountering a literal, this check only applies to strings that are actually interned. If a literal is referenced in non-pool memory (using "new"), a new object is created, even if a matching string already exists in the pool.

To illustrate this, consider the following code:

<code class="java">String one = new String("test");
String two = "test";</code>
Copy after login

"test" is a literal that is interned, so a reference to it is already in the pool. However, when one is created using "new," a new String object is allocated in memory, meaning it has a different reference from two.

<code class="java">System.out.println(one.equals(two)); // true
System.out.println(one == two);      // false</code>
Copy after login

The equals() method compares the strings' values, which are the same, but the == operator compares their references, which are different.

The confusion may arise from statements that imply strings created using "new" are still placed in the pool, but this is misleading. While a string with the same value as the literal may exist somewhere in memory, it is not added to the pool and is not accessible through the literal itself.

Therefore, when using the "new" operator, the JVM creates a new String object in memory instead of returning a reference to an existing one from the pool, even if one exists with the same value.

The above is the detailed content of Why does \'new String()\' create a new object, even if a string with the same value already exists in the String constant pool?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template