We can create Strings using explicit or implicit constructions.
Implicit construction example:
String str1 = "hello";
String str2 = "hello";
str1==str2 // returns true, both str1 and str2 points to the same String object in string pool
Explicit construction example
String str3 = new String("hello");
String str4 = new String("hello")
str3==str4 // returns false because str3 and str4 points to different String object
Since it's preferred (memory save) to use implicit construction why we shouldn't use == operator? As far as I know the only one reason to not use == operator is that we can forget about not using explicit constructions and try to do something like
str1==str3
str3==str4 // and so forth