Home >Java >javaTutorial >Does Declaring Strings as `final` in Java Affect `==` Comparisons?

Does Declaring Strings as `final` in Java Affect `==` Comparisons?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-03 06:12:10597browse

Does Declaring Strings as `final` in Java Affect `==` Comparisons?

Comparing Strings with == Declared as Final in Java

When comparing strings using the equality operator (==) in Java, the result can differ based on whether the strings are declared as final.

Final Strings

When a string is declared as final, the compiler optimizes it by inlining the value as a compile-time constant expression. This means that the string value is determined at compile time and stored directly in the bytecode, rather than being dynamically allocated at runtime.

Behavior of Final Strings

In the case of strings declared as final, the comparison expression concat == "string" returns true because:

  • The compiler replaces the concatenation operation with the inlined string: String concat = "str" "ing"; // becomes String concat = "string";
  • String literals are interned, meaning that multiple references to the same string value share the same instance. Therefore, concat and the literal "string" refer to the same String object, resulting in true equality.

Non-Final Strings

In contrast, non-final strings are not inlined and are allocated dynamically at runtime. The concatenation operation creates a new String object, which is different from the literal "string" in memory. Consequently, the comparison expression concat == "string" returns false.

Verification

To confirm this behavior, one can compare the bytecode of the non-final and final string versions:

Non-Final Version:

// stores str and ing in separate variables and uses StringBuilder for concatenation

Final Version:

// directly inlines the final variable to create String string at compile time

Therefore, declaring strings as final and initializing them with compile-time constant expressions can affect the result of equality comparisons using == due to the inlining and interning of string literals.

The above is the detailed content of Does Declaring Strings as `final` in Java Affect `==` Comparisons?. 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