[java] Java에서 “논리적 배타적”연산자 만들기

관찰 :

Java에는 논리 AND 연산자가 있습니다.
Java에는 논리 OR 연산자가 있습니다.
Java에는 논리 NOT 연산자가 있습니다.

문제:

sun에 따르면 Java에는 논리적 XOR 연산자가 없습니다 . 하나를 정의하고 싶습니다.

분석법 정의 :

방법으로 간단히 다음과 같이 정의됩니다.

public static boolean logicalXOR(boolean x, boolean y) {
    return ( ( x || y ) && ! ( x && y ) );
}

메소드 호출 :

이 메소드는 다음과 같은 방식으로 호출됩니다.

boolean myVal = logicalXOR(x, y);

운영자 사용법 :

나는 오히려 다음과 같이 사용되는 연산자를 원할 것입니다.

boolean myVal = x ^^ y;

질문:

Java에서 새 연산자를 정의하는 방법에 대한 정보가 없습니다. 어디서부터 시작해야합니까?



답변

Java 에는 논리적 XOR 연산자 가 있으며 ^는 (와 같이 a ^ b)입니다.

그 외에도 Java로 새 연산자를 정의 할 수 없습니다.

편집 : 예는 다음과 같습니다.

public static void main(String[] args) {
    boolean[] all = { false, true };
    for (boolean a : all) {
        for (boolean b: all) {
            boolean c = a ^ b;
            System.out.println(a + " ^ " + b + " = " + c);
        }
    }
}

산출:

거짓 ^ 거짓 = 거짓
거짓 ^ 참 = 참
참 ^ 거짓 = 참
참 ^ 참 = 거짓


답변

x! = y 아닙니까?


답변

Java에는 논리 AND 연산자가 있습니다.
Java에는 논리 OR 연산자가 있습니다.

잘못된.

자바는

  • 두 개의 논리 AND 연산자 : 정상 AND는 & 및 단락 AND는 &&이며
  • 두 개의 논리 OR 연산자 : 정상 OR은 | 단락 OR은 ||입니다.

단락 평가가 불가능하기 때문에 XOR은 ^로만 존재합니다.


답변

아마 당신은 사이의 차이를 오해 &하고 &&, |||
바로 가기 운영자의 목적 &&||두 번째 피연산자가 평가 될 필요가 없습니다, 그래서 첫 번째 피연산자의 값이 결과를 결정 할 수 있다는 것입니다.

이는 두 번째 피연산자가 오류를 발생시키는 경우 특히 유용합니다. 예 :

if (set == null || set.isEmpty())
// or
if (list != null && list.size() > 0)

그러나 XOR 을 사용하면 결과를 얻기 위해 항상 두 번째 피연산자를 평가해야합니다 ^.


답변

당신은 단지 쓸 수 있습니다 (a!=b)

이것은와 같은 방식으로 작동합니다 a ^ b.


답변

연산자 오버로딩은 의도적으로 언어에서 제외 된 부분이기 때문입니다. 그들은 문자열 연결로 약간 “속임수”를했지만 그 이상의 기능은 존재하지 않습니다.

(면책 조항 : Java의 마지막 2 주요 릴리스와 함께 작업하지 않았으므로 지금 있다면 매우 놀랄 것입니다)


답변

Java에서 유일하게 연산자 오버로드는 + on Strings입니다 ( JLS 15.18.1 문자열 연결 연산자 + ).

공동체는 수년간 3으로 나뉘어졌으며 1/3은 원하지 않고 1/3은 원하지 않으며 1/3은 신경 쓰지 않습니다.

유니 코드를 사용하여 기호 인 메소드 이름을 작성할 수 있습니다. 따라서 사용하려는 기호가 있으면 myVal = x. $ (y); 여기서 $는 기호이고 x는 프리미티브가 아닙니다.하지만 일부 편집기에서는 피할 수 없으며 프리미티브에서 수행 할 수 없으므로 제한적입니다.