Я пытаюсь подготовиться к сертификации OCA Java и застрял в некоторых вопросах, связанных с заданием в условиях if. Может ли кто-нибудь объяснить мне причину различного поведения в коде ниже? По моей точки зрения, я просто положить те же два логических значения в «инклюзивной или» условие 6 раз ...Tricky Java: boolean assign in if condition
package pck;
class SuperMain{
boolean b;
public static void main(String args[]){
new SuperMain();
}
SuperMain(){
if(_true()|_false())
System.out.println(b); //1 - prints false
if(b=true|_false())
System.out.println(b); //2 - prints true
if(_true()|(b=false))
System.out.println(b); //3 - prints false
if((b=true)|_false())
System.out.println(b); //4 - prints false
if(b=true|(b=false))
System.out.println(b); //5 - prints true
if((b=true)|(b=false))
System.out.println(b); //6 - prints false
}
boolean _true(){return b=true;}
boolean _false(){return b=false;}
}
Какой из них вы не получите? – assylias
Этот код вы написали, чтобы проверить себя, или это происходит из учебника где-то? Он не только имеет назначение в условном выражении, но также использует побитовое ИЛИ. Я предполагаю, что сертификационные экзамены намеренно бросают такие вещи, как это, но если бы я получил этот код в обзоре, я бы отправил его обратно. Мы не делаем этого в реальном мире (ну, некоторые делают, но не моя команда). – shoover
@shoover - для Java булевы, побитовые ИЛИ и логические ИЛИ эквивалентны, за исключением того факта, что второе выражение не оценивается в некоторых случаях для логического ИЛИ. (И приоритет;)) –