Home >Java >javaTutorial >Does Declaring Strings as `final` in Java Change How `==` Compares Them?

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 15:51:10179browse

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

Comparing Strings with == When Declared Final in Java

In Java, the == operator compares the memory references of two objects. However, when strings are declared as final and initialized with compile-time constants, a unique behavior arises.

Scenario 1: Non-Final Strings

Consider the following code segment:

String str1 = "str";
String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");

The result of this code would be false. The concatenation operation creates a new String object, which is not equal to the pre-existing string literal "string".

Scenario 2: Final Strings

Now, let's declare the strings as final:

final String str1 = "str";
final String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");

Surprisingly, the result is now true. This is because declaring the strings as final allows the compiler to inline their values and treat the entire expression as a compile-time constant expression.

Compiler Optimization: Interning

When a compile-time constant expression involves a String, the Java virtual machine (JVM) "interns" it, which means it stores a unique instance of the String in a special location called the String pool. Thus, the concatenated string in the second scenario is directly compared to the interned string "string", resulting in a true result.

Conclusion

Declaring strings as final with compile-time constants leads to the optimizer treating the expression as a single String object, allowing syntactic equality checks (==) with pre-existing string literals. This demonstrates the compiler optimization in Java and how it can impact object identity comparisons.

The above is the detailed content of Does Declaring Strings as `final` in Java Change How `==` Compares Them?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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