除非您有不寻常的、特定的需求和用例,否则请始终使用第二个版本,而不要使用新版本。
为回应@Ynwa 而编辑
如果您特别需要一个您知道是唯一的字符串,并且您将与 == 进行比较(这也是不常见的),则使用第一种情况。例如,如果你有一些字符串队列,你需要一个特定的字符串来表示“全部完成”。现在,可以想象,您可以使用 null 或一些奇怪的亚美尼亚字符字符串,但 null 可能对您的逻辑是合法的,如果您的软件最终在亚美尼亚被使用怎么办?干净的方法是
public final static String TERMINATOR = new String("Terminator"); // actual text doesn't matter ...
// then, some loop taking from the Queue
while (keepGoing) {
String s = myQueue.take();
if (s == TERMINATOR)
keepGoing = false;
else
// normal processing of s
}
如果客户端将“终结者”放入队列,它将得到处理。所以你不阻止他们使用“终结者”。但是,如果客户端将 ThatQueueClass.TERMINATOR 放入队列,它将被关闭。