그래서 논리 값이 이진 사업자, 자바가 &
, |
, ^
, &&
와 ||
.
여기에서 그들이하는 일을 간단히 요약 해 보겠습니다.
의 경우
&
결과 값은true
두 피연산자 값이 모두 다음 과 같은 경우입니다true
. 그렇지 않으면 결과는false
입니다.의 경우
|
결과 값은false
두 피연산자 값이 모두 다음 과 같은 경우입니다false
. 그렇지 않으면 결과는true
입니다.의 경우
^
결과 값은true
피연산자 값이 다른 경우입니다. 그렇지 않으면 결과는false
입니다.
&&
연산자 비슷&
하지만 좌측의 값이 피연산자는 우측 피연산자 만 평가한다true
.
||
연산자 비슷|
하지만, 그 좌측의 값이 피연산자는 우측 피연산자 만 평가한다false
.
자, 모두 5 중, 그 중 3, 즉 화합물 할당 버전을 가지고 |=
, &=
하고 ^=
. 내 질문은 분명하다 그래서 왜 자바는 제공하지 않습니다 &&=
및 ||=
뿐만 아니라? 나는 그보다 내가 필요한 것보다 필요한 것을 발견 &=
하고 |=
.
그리고 Java가 .NET을 가지고 있기 때문에 "너무 길기 때문에"가 좋은 대답이라고 생각하지 않습니다 >>>=
. 이 누락에 대한 더 나은 이유가있을 것입니다.
15.26 할당 연산자 부터 :
12 개의 할당 연산자가 있습니다. [...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
&&=
및 ||=
구현 된 경우 오른쪽을 먼저 평가하지 않는 유일한 연산자라는 의견이 작성 되었습니다. 복합 할당 연산자가 오른쪽을 먼저 평가한다는이 개념은 실수라고 생각합니다.
가입일 15.26.2 화합물 할당 연산자 :
형태의 복합 대입 식을
E1 op= E2
동등E1 = (T)((E1) op (E2))
여기서T
의 타입E1
즉 제외E1
한번만 평가된다.
증거로 다음 스 니펫 NullPointerException
은 ArrayIndexOutOfBoundsException
.
int[] a = null;
int[] b = {};
a[0] += b[-1];