这句话恰当吗。如果(0!=表达式或变量){}在java中?

这句话恰当吗。如果(0!=表达式或变量){}在java中?,java,syntax,Java,Syntax,我正在编写一个java源代码,其风格如下: if (0 == var) {} and if (null == someObj) {} 或 我是否应该将其改写为: if (var == 0) {} and if (someObj == null) {} ? 提前谢谢 拥有以下内容是完全正确的: if (0 == var) {} and if (null == someObj) {} 它被称为,以防止意外使用单个=代替= 我个人从未用过。但是有些人喜欢它。这真的是一个品味的问题 但是,

我正在编写一个java源代码,其风格如下:

if (0 == var) {}
and 
if (null == someObj) {}

我是否应该将其改写为:

if (var == 0) {}
and 
if (someObj == null) {}
?


提前谢谢

拥有以下内容是完全正确的:

if (0 == var) {}
and 
if (null == someObj) {}
它被称为,以防止意外使用单个
=
代替
=

我个人从未用过。但是有些人喜欢它。这真的是一个品味的问题


但是,它在Java中没有任何用处。因为,这样的意外输入是在编译时捕获的

下面将给出Java中的编译时错误

if( var = 0 ) 
{
//Some code
}
因为赋值操作在Java中不会产生布尔值。 然而,在像C/C++这样的语言中,上述内容是有效的,如果未启用警告,编译器将不会给出错误。在C/C++中,上述
if
条件的计算结果将始终为false(0)。因此,它可能会被忽略,并在运行时产生意外的结果

在GCC中,在启用所有警告的情况下,它将在C或C++中发出上述警告:

warning: suggest parentheses around assignment used as truth value
因此,这在C/C++中可能没有多大用处,因为人们希望编译时包含所有警告并修复所有警告。正如我之前所说,这是个人的选择,没有区别


因此,
if(0==var){}
是一种有效的语法,与
if(var==0){}
相同,如果您更喜欢Yoda条件,那就试试吧

>P>第一种风格是首选的,因为说“代码> var=null < /Cult>而不是<代码> var=null <代码>意外地将是一种在C语言和C++语言中很难捕捉到的bug,但是<代码> null=var >代码>很容易被捕获,因为它不会编译。如注释中所述,这不适用于Java,因为
null=var
不是布尔表达式。

一般来说,写入
0==n
称为
yoda条件。因为如果你大声说,你会说如果零等于我的var,你会说

最好写
n==0
。但事实完全一样。但它读起来更好

该条件的某些优点不适用于java

if (value = 42)
产生编译错误
value=42
生成一个
int
,它在java中的
if
中不是有效的输入。但在
C
中完全合法

使用左侧的
常量进行比较是一种常见的最佳做法。但前提是使用对象等于方法

if ("CONSTANT".equals(myString))
如果
myString
为null,或者您正在比较
基本体
,因为没有
.equals()
访问变量,那么检查null是没有意义的

if ( "CONSTANT" == null )

尽管这只是我的观点,但好处只是易读性。

这种类型的术语被称为“Yoda expressions”,因为它们与英语自然语言相比是“向后的”

我认为赋值是不值得的——好的代码审计工具可以捕获这些类型的错误,而且大多数错误应该已经被更严格的Java编译器捕获(使用
=
而不是
=
是C语言中常见的打字错误!)

但是,当你使用<代码> CuasReto 方法时,你需要考虑<代码> null Value.<

 if ("example".equals(input))
无法运行
NullPointerException
,而


可以,并且需要额外检查
null
值。

您遇到了用Java编写的C代码。把它改成你喜欢的任何东西。它不适用于java,不像C++或C++那样,事情不能被强迫为BooL。s@jozefg谢谢,我会更新我的答案。谢谢大家,这就足够了。我很感激。这也是防止空检查的好方法。谢谢
 if ("example".equals(input))
 if (input.equals("example"))