첫째, 일부 배경 : 나는 IT 교사 훈련 중이며 Java의 부울 연산자를 10 학년 클래스에 소개하려고합니다. 선생님이 선생님이 준비한 워크 시트를 살펴보면서 단 하나의 & 또는 | "같은 일을하기"때문에 연산자를 나타냅니다.
&와 &&의 차이점을 알고 있습니다.
&는 "비트 트위들 링"을 수행하기 위해 정수 사이에서 사용하기위한 비트 연산자입니다.
&&는 부울 값 사이에 사용하기위한 조건부 연산자입니다.
이 연산자가 항상 "같은 작업"을하지는 않는다는 점을 증명하기 위해 부울 값 사이에 비트 단위를 사용하면 오류가 발생하는 예를 찾기 시작했습니다. 이 예제를 찾았습니다
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
이 예는 식의 후반에 의해 값을 변경해야하는 경우 비트 단위가 열성적인 연산자이고 조건이 단락으로 동작하기 때문에 결과간에 차이가 발생할 수 있음을 보여줍니다 (두 번째는 평가하지 않음) &&의 경우 전반이 거짓이고 ||의 경우에는 참인 경우 반입니다.
이 예제에 문제가 있습니다. 비교하는 것과 동시에 왜 값을 변경하고 싶습니까? 강력한 코딩 방법은 아닙니다. 나는 항상 프로덕션 코드에서 한 줄로 여러 작업을 수행하는 것을 싫어했습니다. 그의 코드의 유지 관리 성과 관련하여 양심이없는 "코딩 카우보이"처럼 보입니다. 일부 도메인에서는 코드가 가능한 한 작아야한다는 것을 알고 있지만 이것이 일반적으로 좋지 않은 방법입니까?
&& 및 ||를 사용하도록 권장하는 선택을 설명 할 수 있습니다. 이상 및 | 이것은 소프트웨어 엔지니어링에서 허용되는 코딩 규칙 이기 때문에 입니다.
그러나 누군가가 조건부 표현에 비트 연산자를 사용하는 더 나은, 심지어 실제적인 예를 줄 수 있습니까?