Java의 바로 가기 "또는 수정"(|=) 연산자
자바에서 긴 비교를 하고 있는데, 그 중 하나 이상이 사실인지 알고 싶습니다.위해 가기 연산자를 하였습니다.|=
negativeValue = negativeValue || boolean
.
boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);
negativeValue
사실대로 말하다★★★★★★★★★★★★★★★★★?대했했 ?로 ?? ????Sun의 사이트나 스택오버플로우에서는 언급되지 않았지만, Eclipse는 문제가 없는 것 같고, 코드는 컴파일되어 실행됩니다.
여러 인 교차를 할 경우, '교차하다'를 사용할 수 ?&=
&&
|=
는, 부울 논리 연산자의 복합 할당 연산자(JLS 15.26.2)입니다.|
(JLS 15.22.2) 조건과 혼동하지 말 것||
(JLS 15.24)또 있다&=
★★★★★★★★★★★★★★★★★」^=
로직의 &
★★★★★★★★★★★★★★★★★」^
각각 다음과 같다.
,의 ,boolean b1, b2
두 즉 이 두 가지는 같습니다.
b1 |= b2;
b1 = b1 | b2;
연산자 간의 ( 「」 「」 「」 ).&
★★★★★★★★★★★★★★★★★」|
)과 ( )의 조건부 )의입니다.&&
★★★★★★★★★★★★★★★★★」||
는, 가 「 않는는 「쇼트」를 실시합니다이치노 ,, 다, 다, 다, 다, 다이다.
&
★★★★★★★★★★★★★★★★★」|
항상 양쪽 오퍼랜드를 평가하다&&
★★★★★★★★★★★★★★★★★」||
오른쪽 피연산자를 조건부로 평가합니다.오른쪽 피연산자는 그 값이 바이너리 연산의 결과에 영향을 줄 수 있는 경우에만 평가됩니다.즉, 다음과 같은 경우 올바른 피연산자가 평가되지 않습니다.- 의 왼쪽
&&
false
- 가 무엇을하는지 여부에 가 다음과 같습니다).
false
)
- 가 무엇을하는지 여부에 가 다음과 같습니다).
- 의 왼쪽
||
true
- 가 무엇을하는지 여부에 가 다음과 같습니다).
true
)
- 가 무엇을하는지 여부에 가 다음과 같습니다).
- 의 왼쪽
다시 그 하고, 그 동안 , ,, 래, ,, ,, ,, ,, 성, 성, 성, so, ,, so, so, so, so, so, so, so, so, so, so, so, so.|=
는, for is동 for for for for for for for for for for for for for for와 같은 .=
★★★★★★★★★★★★★★★★★」||
이치노 hand hand hand hand hand hand hand hand hand since since since since 의 오른쪽부터|=
는 단순한 는 정수 비교 연산입니다.|
합선이 중요하지 않습니다.
단락이 필요하거나 필요한 경우가 있지만 시나리오가 그렇지 않습니다.
다른 언어들과 달리 자바에는&&=
그리고.||=
이는 "Java는 왜 조건부 연산자와 조건부 연산자의 복합 할당 버전을 가지고 있지 않은가?"라는 질문에서 논의되었습니다. (&=, |=).
이것은 |와 &&(LHS를 기반으로 결과를 이미 알고 있는 경우 RHS를 평가하지 않는다는 점에서)와 같은 "숏컷"(또는 단락) 연산자는 아니지만, 작업 측면에서 원하는 것을 수행합니다.
차이의로서, 이 는, 이 도 괜찮습니다.text
boolean nullOrEmpty = text == null || text.equals("")
하지만 이것은 그렇지 않다:
boolean nullOrEmpty = false;
nullOrEmpty |= text == null;
nullOrEmpty |= text.equals(""); // Throws exception if text is null
할 수 ."".equals(text)
그 특별한 경우 - 나는 단지 원리를 보여주려고 했을 뿐이다.)
진술은 하나만 해도 돼여러 줄에 걸쳐 표현하면 샘플 코드와 거의 동일하게 읽힙니다.단, 필수 사항은 다음과 같습니다.
boolean negativeValue
= defaultStock < 0
| defaultWholesale < 0
| defaultRetail < 0
| defaultDelivery < 0;
'만나면 안 돼요'를 사용하여,|
수 ||
비교를 하지 않아도 암묵적으로 브런치를 사용하는 것을 의미하기 때문에 비용이 몇 배 더 들 수 있습니다.
Guava 라이브러리는 당신의 문제에는 오버킬이 될 수 있지만 다음과 같은 구문을 가지고 있습니다.Predicate
는 또는 //또는 "/"의 를 수행합니다.Predicate
s.
기본적으로 비교는 개체로 변환되고 컬렉션으로 패키지화된 다음 반복됩니다.또는 술어의 경우 첫 번째 실제 적중률이 반복에서 반환되며, 및 의 경우 그 반대도 마찬가지입니다.
가독성에 관한 것이라면 테스트 로직에서 테스트된 데이터를 분리하는 개념을 가지고 있습니다.코드 샘플:
// declare data
DataType [] dataToTest = new DataType[] {
defaultStock,
defaultWholesale,
defaultRetail,
defaultDelivery
}
// define logic
boolean checkIfAnyNegative(DataType [] data) {
boolean negativeValue = false;
int i = 0;
while (!negativeValue && i < data.length) {
negativeValue = data[i++] < 0;
}
return negativeValue;
}
그 코드는 더 장황하고 설명이 명확해 보인다.메서드 호출에서는 다음과 같이 어레이를 작성할 수도 있습니다.
checkIfAnyNegative(new DataType[] {
defaultStock,
defaultWholesale,
defaultRetail,
defaultDelivery
});
「비교 문자열」보다 읽기 쉽고, 쇼트 서킷(어레이 할당 및 메서드 호출의 비용)의 퍼포먼스도 뛰어납니다.
편집: varargs 파라미터를 사용하면 보다 읽기 쉽게 할 수 있습니다.
메서드 시그니처는 다음과 같습니다.
boolean checkIfAnyNegative(DataType ... data)
콜은 다음과 같습니다.
checkIfAnyNegative( defaultStock, defaultWholesale, defaultRetail, defaultDelivery );
오래된 글이지만, 초보자에게 다른 시각을 제공하기 위해 예를 들어 보겠습니다.
인 활용 는 '비슷한 복합 연산자'가 될 입니다.+=
이치노
int a = 10; // a = 10
a += 5; // a = 15
이게 무슨 소용이었나?요점은 보일러 플레이트를 피하고 반복 코드를 제거하는 것이었다.
다음 .b1
같은 줄에 두 번.
b1 |= b2;
List<Integer> params = Arrays.asList (defaultStock, defaultWholesale,
defaultRetail, defaultDelivery);
int minParam = Collections.min (params);
negativeValue = minParam < 0;
OR || 논리 부울 OR
| OR | 트 | or OR
|= 비트 포함 OR 및 할당 연산자
|=가 단락되지 않는 이유는 비트 단위 또는 논리 OR이 아니기 때문입니다.즉, 다음과 같습니다.
C | = 2는 C = C | 2와 동일
언급URL : https://stackoverflow.com/questions/2486472/shortcut-or-assignment-operator-in-java
'programing' 카테고리의 다른 글
window.onload vs $(최소)입니다.ready() (0) | 2023.01.25 |
---|---|
.syslog 프리펜드 .after() 및 .before() (0) | 2023.01.25 |
판다를 사용하여 하나의 데이터 프레임에서 테스트 및 훈련 샘플을 작성하려면 어떻게 해야 합니까? (0) | 2023.01.25 |
개별 목록으로 튜플 목록을 압축 해제하려면 어떻게 해야 합니까? (0) | 2023.01.25 |
정수 목록에서 지정된 값에 가장 가까운 숫자를 가져옵니다. (0) | 2023.01.25 |