我注意到有些人在比较两个字符串时似乎有所不同,例如将变量与常量进行比较时。例如,假设我们有一个常量字符串和一个输入法:
public final String CONSTANT_STRING = "A constant string";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
首先使用未知输入是否更好或更快:
br.readLine().equals(CONSTANT_STRING)
或者将常数与未知数进行比较:
CONSTANT_STRING.equals(br.readLine());
这不是性能问题。即使
NullPointerException
返回 br.readLine()
,第二个版本也不会产生 null
。不过第一个确实如此。
这并不是更好或更快,但如果您知道存在
CONSTANT_STRING
,那么您保证如果您采用第二种方式,您将永远不会得到NullPointerException
。
equals()
类的String
方法将返回false
。只有当两个字符串的长度相等时才会比较内容。所以顺序不会影响性能。
正如您在其他答案中看到的,第二种方法不会发生
NullPointerException
。所以,第二种方法更好。
public 抽象? String CONSTANT_STRING = "常量字符串";