2012-10-11 156 views
-1

可能重复:
Checking for null - what order?验证字符串

谁能告诉我什么是验证为“空”,为什么一个字符串值,更好的方法?

String user = userService.getUserName(accID); 

1) if(user != null) { 
    .. 
    } 

2) if(null != user) { 
    .. 
    } 
+0

如果我正确地理解你的问题,请看看这里:http://stackoverflow.com/questions/2601978/how-to-check-if-my-string-is-equal- to-null –

回答

2

没有什么不同。第一个版本更常用。

0

第一种方法主要由开发人员使用。我不认为这有什么区别。

0

我见过两种方法。有些人认为最好先给你比较的价值。这可能会更好,如果你有很多方法可以看到你首先比较的价值。

我个人使用第一个选项,因为这是我的习惯。

我怀疑是否有任何性能差异,如果这是你的问题。所有不同之处在于代码风格和可读性。

0

由于它没有功能差异,第一个更具可读性,所以您应该选择第一个。

2

对于这种情况并不重要,尽管第一种方法更为常见。

但是,当直接将其喂入等方法时,所谓的yoda条件是优选的。

如:

if("".equals(string)){ 
} 

是首选在

if(string.equals("")){ 
} 

,因为它避免了空指针异常

+1

Yoda条件与==也避免了*某事* ---意外的分配,而不是比较。由于这是默认情况下的编译器警告,不过,用不自然的语法来防范它并没有什么意义。 –

+0

表示同意,但是在if语句中,只有在布尔类无论如何才会发生。所有其他类将导致“这不会导致布尔型”错误。 –

+0

真的......当与一个文字比较(这对于一个布尔无论如何都没有意义),但是比较两个布尔值时,通常不会发生这种情况。然而,在这种特殊情况下,如果代码不是编译器警告,代码可能真的被混淆。 –

0

正是在这种情况下口味的问题。

在其他情况下,例如,如果你比较反对一个字符串/常量,我宁愿这样:

if ("yourStringConstant".equals(yourVariable)) 

因为这也将处理的情况下,当yourVariable将是空的。如果您以相反方式执行此操作,则会发生NullPointerException:

if (yourVariable.equals("yourStringConstant")) 
0

第二种方法来自C/C++。当你用C编写if (user = null)而不是if (user == null)时,你会得到一个逻辑错误,但不是编译错误,这样的错误可能真的很难检测到。

但是如果您编写if(null = user)而不是if(null == user),您将收到编译错误,因为您无法将变量分配给null。这就是为什么在那里经常使用颠倒的参数顺序。

但是在Java中,这并没有多大意义,因为Java编译器不会采用if(user = null)表达式,因此您可以使用任何方法。第一个是更广泛,虽然

+0

如果'user'恰好是'Boolean',则不会有编译器错误。 –

+0

不知道。为什么会发生? – svz

+0

由于自动装箱 - 整个表达式'boolVar = null'的类型是'布尔',在'if'里面装箱到'boolean'。在运行时,它总是抛出一个NPE,当然。 –