.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
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
It is important to note that ==
is much cheaper than equals()
(a single pointer comparision instead of a loop), thus, in situations where it is applicable (i.e. you can guarantee that you are only dealing with interned strings) it can present an important performance improvement. However, these situations are rare.
0 comments:
Post a Comment