programing

Java의 바로 가기 "또는 수정"(|=) 연산자

randomtip 2023. 1. 25. 08:44
반응형

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는 또는 //또는 "/"의 를 수행합니다.Predicates.

기본적으로 비교는 개체로 변환되고 컬렉션으로 패키지화된 다음 반복됩니다.또는 술어의 경우 첫 번째 실제 적중률이 반복에서 반환되며, 및 의 경우 그 반대도 마찬가지입니다.

가독성에 관한 것이라면 테스트 로직에서 테스트된 데이터를 분리하는 개념을 가지고 있습니다.코드 샘플:

// 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와 동일

Java 연산자를 위한 튜토리얼

언급URL : https://stackoverflow.com/questions/2486472/shortcut-or-assignment-operator-in-java

반응형