There is a small exception from this rule, as far as I know. The String class holds a pool of String references and it could be that you get a reference to an already created String. You can manipulate the defaut behaviour by using the String.intern() method. Therefore it is possible that Strings which pass the equals() test do also pass the '==' test. However, this is nothing to rely on and in general you can say that you'll get a new String object in most cases.