谁能告诉我什么是验证为“空”,为什么一个字符串值,更好的方法?
String user = userService.getUserName(accID);
1) if(user != null) {
..
}
2) if(null != user) {
..
}
谁能告诉我什么是验证为“空”,为什么一个字符串值,更好的方法?
String user = userService.getUserName(accID);
1) if(user != null) {
..
}
2) if(null != user) {
..
}
没有什么不同。第一个版本更常用。
第一种方法主要由开发人员使用。我不认为这有什么区别。
我见过两种方法。有些人认为最好先给你比较的价值。这可能会更好,如果你有很多方法可以看到你首先比较的价值。
我个人使用第一个选项,因为这是我的习惯。
我怀疑是否有任何性能差异,如果这是你的问题。所有不同之处在于代码风格和可读性。
由于它没有功能差异,第一个更具可读性,所以您应该选择第一个。
对于这种情况并不重要,尽管第一种方法更为常见。
但是,当直接将其喂入等方法时,所谓的yoda条件是优选的。
如:
if("".equals(string)){
}
是首选在
if(string.equals("")){
}
,因为它避免了空指针异常
Yoda条件与==也避免了*某事* ---意外的分配,而不是比较。由于这是默认情况下的编译器警告,不过,用不自然的语法来防范它并没有什么意义。 –
表示同意,但是在if语句中,只有在布尔类无论如何才会发生。所有其他类将导致“这不会导致布尔型”错误。 –
真的......当与一个文字比较(这对于一个布尔无论如何都没有意义),但是比较两个布尔值时,通常不会发生这种情况。然而,在这种特殊情况下,如果代码不是编译器警告,代码可能真的被混淆。 –
正是在这种情况下口味的问题。
在其他情况下,例如,如果你比较反对一个字符串/常量,我宁愿这样:
if ("yourStringConstant".equals(yourVariable))
因为这也将处理的情况下,当yourVariable将是空的。如果您以相反方式执行此操作,则会发生NullPointerException:
if (yourVariable.equals("yourStringConstant"))
第二种方法来自C/C++。当你用C编写if (user = null)
而不是if (user == null)
时,你会得到一个逻辑错误,但不是编译错误,这样的错误可能真的很难检测到。
但是如果您编写if(null = user)
而不是if(null == user)
,您将收到编译错误,因为您无法将变量分配给null
。这就是为什么在那里经常使用颠倒的参数顺序。
但是在Java中,这并没有多大意义,因为Java编译器不会采用if(user = null)
表达式,因此您可以使用任何方法。第一个是更广泛,虽然
如果'user'恰好是'Boolean',则不会有编译器错误。 –
不知道。为什么会发生? – svz
由于自动装箱 - 整个表达式'boolVar = null'的类型是'布尔',在'if'里面装箱到'boolean'。在运行时,它总是抛出一个NPE,当然。 –
如果我正确地理解你的问题,请看看这里:http://stackoverflow.com/questions/2601978/how-to-check-if-my-string-is-equal- to-null –