String a = new String("");
String b = new String("");
これだと、a==b はfalseになる。new というキーワードを使う以上、
常に新しいオブジェクトが作成されるからaとbは別のインスタンス。
ただし、
a.equals(b) はtrue。java.lang.Stringではequals()がオーバーライド
されていて、格納されている文字が一致すればtrueが返る仕様になっている。

String a = "";
String b = "";
これだと、a==b はtrueになる。文字列リテラルはいったん作成されると
VM上のある場所にプールされる。次回以降に同一のリテラルが呼び出されると
プールされた同じメモリ領域を参照するようになる。
当然、
a.equals(b) はtrue。おなじものを参照しているのだから。