首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中有使用null == value条件的理由吗?

在java中有使用null == value条件的理由吗?
EN

Stack Overflow用户
提问于 2012-12-06 01:16:32
回答 7查看 285关注 0票数 2

我在某人的代码中看到了很多这样的情况: null-check条件是这样写的:

代码语言:javascript
复制
if (null == value)

而不是

代码语言:javascript
复制
if (value == null)

我认为在Java语言中,没有任何理由让null放在运算符之前。这样做有什么好处吗?这只是一个C++程序员错误地将他的技能应用到Java语言的案例,还是我错过了什么重要的东西?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-12-06 01:19:21

这是一个所谓的"Yoda Conditions" (item #1)的案例。虽然在C/C++中可以使它们合理化,但在Java中没有理由使用它们。

在C/C++中,任何类型的表达式都可以进入ifs和whiles。

代码语言:javascript
复制
if (var = NULL) // No compile-time error in C/C++

而不是

代码语言:javascript
复制
if (var == NULL)

是新手中常见的错误。Yoda条件被认为是解决这个问题的一种补救方法,但代价是使代码“约迪化”:C/C++会将赋值捕获到NULL

代码语言:javascript
复制
if (NULL = var) // Compile-time error

但是“反向”的NULL检查是可以的:

代码语言:javascript
复制
if (NULL == var)

由于Java将ifwhilefor控制块中的非布尔表达式视为错误,因此它将捕获var = null而不是var == null,从而触发错误。因此,没有理由通过"Yodifying“来放弃表达式的可读性。

票数 11
EN

Stack Overflow用户

发布于 2012-12-06 01:20:16

假设你只想打印长度超过20的字符串的内容,你可以这样做:

代码语言:javascript
复制
if (str != null && str.length() > 20) {
    System.out.println(str);
}

如果str实际上是null,省略这个str != null &&将抛出一个NPE。

如果您指的是

代码语言:javascript
复制
if (str == null) { ... }

代码语言:javascript
复制
if (null == str) { ... }

没有。

票数 2
EN

Stack Overflow用户

发布于 2012-12-06 01:21:42

答案是否定的!

在java中绝对不需要优先选择if (null == value)而不是if (value == null)

if (null == value)的检查有点奇怪,至少在java中是这样的,这来自于C和C++的代码指南,这是有意义的。

我更喜欢可读性更好的if (value == null)

原因是为了避免C/C++错误if (value = null)而不是正确的if (value == null)

如果使用if (null = value),C/C++编译器将抛出错误。

然而,在java中,即使是if (value = null)也是一个语法错误。

所以不要在java中使用(null == value)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13728739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档