这句话恰当吗。如果(0!=表达式或变量){}在java中?
我正在编写一个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) {} 它被称为,以防止意外使用单个=代替= 我个人从未用过。但是有些人喜欢它。这真的是一个品味的问题 但是,
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"))