.equals() tests for value equality.
Consequently, if you actually want to test whether two strings have the same value you should use .equals() (except in a few situations where you can guarantee that two strings with the same value will be represented by the same object eg: String interning).
== is for testing whether two strings are the same object.
// These two have the same value
new String("test").equals("test") // --> true
// ... but they are not the same object, not the same instance because they have different refferences.
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
-----
== tests object references, .equals() tests the string values.
Sometimes it looks as if == compares values, because Java does some behind-the-scenes stuff to make sure identical in-line strings are actually the same object.
No comments:
Post a Comment