'if(x=0)`是Java可编译的吗

'if(x=0)`是Java可编译的吗,java,compilation,version,conditional-statements,convention,Java,Compilation,Version,Conditional Statements,Convention,我很好奇Scott Ambler在他的书《Java编码标准》中说: 2.5.2将常数放在比较的左侧 因此,他建议使用 if ( 1 == something ) {…} if ( 0 = x ) { …} 而不是 if ( something == 1 ) {…} if ( x = 0 ) { …} 天哪 他通过这样说来激励这一点: “尽管它们都是等效的,至少在第一次检查时,代码 左侧的代码编译,右侧的代码不编译。” 正如我所知(当我开始编程Java时,Java14已经在

我很好奇Scott Ambler在他的书《Java编码标准》中说:

2.5.2将常数放在比较的左侧

因此,他建议使用

if ( 1 == something ) {…}    
if ( 0 = x ) { …}
而不是

if ( something == 1 ) {…}    
if ( x = 0 ) { …}  
天哪

他通过这样说来激励这一点:

“尽管它们都是等效的,至少在第一次检查时,代码 左侧的代码编译,右侧的代码不编译。”

正如我所知(当我开始编程Java时,Java14已经在使用),这两个条件都会引发编译器错误

从Ambler语句开始,我尝试搜索Java语法
if(x=0)是可编译的

你能帮我解决这个问题吗?我搜索了JSR的不同版本,没有发现任何可能表明这段代码正在其他java版本上编译的更改

我使用目标和源代码1.2使用Jre7编译器编译,但仍然引发编译器错误。不幸的是,我没有Java 1.1编译器:9

我的问题是:


if(x=0)可以用旧版本的Java编译器编译吗?

它不可编译
if(x=true)
但是如果x是布尔型的,则仍然是。

这个条件
if(x=0){…}if(0=x){…}
将永远不会编译。这是因为
if
接受布尔型,但
x=0
是赋值运算符

其次,
0=x
是不对的。0=x意味着将x的值存储在0中,这是不可能的

在这种情况下,
if(something==1){…}而不是if(1==something){…}
是有效的,并且可以很好地与当前的整数比较,但是对于字符串之间的比较,而不是
=
最好使用
.equals()
请查看此链接以了解
==
.eqauls()

我确信:你在寻找这个吗?在C语言中,这是正确的,但在Java中是不正确的。不,我认为这在Java中永远都是无效的-Java从一开始就在
布尔类型和整数类型之间有明确的区别。所以这只是13年前的废话(当有人在没有适应新语言的情况下从他的C经验中复制粘贴时会发生)是的,这是真的,而且更重要的是,它不允许从非布尔转换为布尔或其他。但我想为Ambler的陈述找到一个解释,因为它在软件工程中是一个沉重的名字。看来他忽略了这一点。不管怎样,我对有多少答案超出了范围感到非常惊讶。如果可以,我会给所有人u-1(除了@GyroGearless)‘if(x=true)’有效,但‘if(true=x)’无效。即使它确实可以编译,我也不建议使用这种语法;)超出了问题的范围-1@Grandanat根据你的问题,我和popfalushi都是正确的,并且在问题的范围内。你需要修改你的问题,你不知道-1的含义。好吧,equals()在这里并不起作用,因为我们在比较原语,但是是的。@Kayaman我同意你的观点,这就是为什么我用了“更好”这个词。我曾建议,如果OP需要在问题的范围内进行比较,那么我会在将来使用它-1@GrijeshChauhan您给出的链接与==有关,但这里Op的问题与==有关=