Был ли `if ( x = 0 )` когда-либо компилируемым для Java?

Я был заинтригован тем, что Скотт Эмблер в своей книге Стандарты кодирования Java говорит, и я цитирую:

2.5.2 Размещение констант в левой части сравнений

Поэтому он рекомендует использовать

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

вместо

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

МОЙ БОГ !!!

И мотивирует это тем, что:

«Хотя они оба эквивалентны, по крайней мере, при первом просмотре код слева компилируется, а код справа — нет».

Насколько мне известно (когда я начал программировать на Java, Java 14 уже использовалась), оба условия вызовут ошибку компилятора.

Начиная с оператора Ambler, я попытался найти, был ли когда-либо компилируемым синтаксис Java if ( x = 0 );.

Можете ли вы помочь мне с этим? Я просмотрел разные версии JSR и не нашел никаких изменений, которые могли бы указывать на то, что этот фрагмент кода компилируется в других версиях Java.

Я скомпилировал с помощью компилятора Jre7, используя цель и источник 1.2, и все еще вызывает ошибку компилятора. К сожалению, у меня нет компилятора Java 1.1: 9

Мой вопрос:

if(x = 0); Можно ли было компилировать старые версии компиляторов Java?


person Grandanat    schedule 16.10.2013    source источник
comment
Я уверен: вы ищете это? 18956582">Есть ли разница между (null == var) и (var == null   -  person Suresh Atta    schedule 16.10.2013
comment
в C было бы правильно, но не в java   -  person Marco Forberg    schedule 16.10.2013
comment
Нет, я не думаю, что это когда-либо было допустимо в Java - в Java с самого начала было четкое различие между boolean и целочисленными типами. Так что это просто дерьмо 13-летней давности (происходит, когда кто-то мысленно копирует и вставляет из своего опыта C, не приспосабливаясь к новому языку)   -  person Gyro Gearless    schedule 16.10.2013
comment
Да, это правда, и более того, он не допускает преобразования небулевых значений в логические и т.д. Но я хотел найти объяснение заявлению Ambler, так как в любом случае это тяжелое имя в разработке программного обеспечения. Похоже, он упускает из виду этот аспект. В любом случае, я был неприятно удивлен тем, сколько ответов вышло за рамки. Я бы всем поставил -1, если бы мог (кроме @GyroGearless)   -  person Grandanat    schedule 16.10.2013
comment
«if (x = true)» допустимо, а «if (true = x)» — нет.   -  person sachin garg    schedule 30.12.2013


Ответы (2)


это не компилируется. if (x=true) однако все еще есть, если x является логическим значением.

person popfalushi    schedule 16.10.2013
comment
И хотя он компилируется, я бы не рекомендовал такой синтаксис;) - person Kayaman; 16.10.2013
comment
Вне рамок вопроса. -1 - person Grandanat; 16.10.2013
comment
@Grandanat и мой, и popfalushi верны в соответствии с вашим вопросом, и это входит в рамки вопроса. Вам нужно изменить свой вопрос, и вы не знаете значение -1 - person SpringLearner; 17.10.2013

Это условие if ( x = 0 ) { …} if ( 0 = x ) { …} никогда не скомпилируется. Это потому, что if принимает логический тип, а x=0 являются операторами присваивания.

во-вторых, 0=x неверно. 0=x означает, что вы сохраняете значение x в 0, что никогда не может быть возможным.

В этом условии if ( something == 1 ) {…} instead of if ( 1 == something ) {…} является допустимым и будет хорошо работать с текущим сравнением с целыми числами, но для сравнения между строками вместо == лучше использовать .equals() Пожалуйста, посмотрите эти ссылки, чтобы узнать разницу между == и .eqauls() link1 ссылка2

person SpringLearner    schedule 16.10.2013
comment
Ну, equals() здесь не играет никакой роли, так как мы сравниваем примитивы, но да. - person Kayaman; 16.10.2013
comment
@Kayaman Я согласен с вами, поэтому я использовал это слово лучше. Я предложил на будущее, если OP нуждается в сравнении в строках. - person SpringLearner; 16.10.2013
comment
Вне рамок вопроса. -1 - person Grandanat; 16.10.2013
comment
@GrjeshChauhan Ссылка, которую вы дали, связана с ==, но здесь вопрос Опа связан с = - person SpringLearner; 30.12.2013