- == tests for reference equality.
- .equals() tests for value equality.Consequently, if you actually want to test whether two strings have the same value you should use .equals().
-
These two have the same value
new String("test").equals("test")--> true -
but they are not the same object
new String("test") == "test"--> false -
neither are these
new String("test") == new String("test")--> false -
... but these are because literals are interned by
-
the compiler and thus refer to the same object
"test" == "test"--> true -
concatenation of string literals happens at compile time, also resulting in the same object
"test" == "te" + "st"--> true -
but .substring() is invoked at runtime, generating distinct objects
"test" == "!test".substring(1)--> false -
interned strings can also be recalled by calling .intern()
"test" == "!test".substring(1).intern()--> true