간단한 if-else보다 Java에서 부울을 무효화하는 더 좋은 방법이 있습니까?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
간단한 if-else보다 Java에서 부울을 무효화하는 더 좋은 방법이 있습니까?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
답변:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
연산자 (실제로 두 개와 함께 두 개 ++
)를 정의하지만 !!
연산자를 정의하지는 않습니다 . 원하는 경우 -(-(integer))
두 -
문자 사이에 공백을 사용할 수 있습니다 . 그러나 공백에 관계없이 !!
두 !
연산자 로 구문 분석 합니다.
theBoolean ^= true;
변수가 4 글자보다 길면 더 적은 키 입력
편집 : 코드는 Google 검색어로 사용될 때 유용한 결과를 반환하는 경향이 있습니다. 위의 코드는 그렇지 않습니다. 그것을 필요로하는 사람들을 위해 여기에 설명 된 것처럼 비트 XOR 입니다.
"명백한"방법 (대부분의 사람들)
theBoolean = !theBoolean;
"가장 짧은"방법 (대부분의 경우)
theBoolean ^= true;
"가장 시각적 인"방법 (가장 확실하지 않음)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
대입 연산자는 항상 할당 된 값을 반환하므로 비트 연산자를 통해 값을 토글 한 다음 메서드 호출에 사용할 새로 할당 된 값을 반환합니다.
C
확실히, Java
부울과 정수를 혼합 할 수는 없습니다 ( while(1)
Java에서는 불가능합니다).
부울 NULL 값을 사용하고 false로 간주하면 다음을 시도하십시오.
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
부울 NULL 값을 전달하지 않으면 다음을 시도하십시오.
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
이들은입니다 깨끗한 그들이 메서드 서명의 의도를 보여 때문에에 비해 쉽게 읽을 수 있습니다 ! 연산자로 쉽게 디버깅 할 수 있습니다.
용법
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
물론, Groovy 또는 확장 메소드를 허용하는 언어를 사용하는 경우 확장을 등록하고 간단하게 수행 할 수 있습니다.
Boolean b = false
b = b.toggle() // == true
Boolean
와 함께 첫 번째 접근법을 사용 하고 실제로 메소드 내에서 토글합니다 (그러나 여전히 모호합니다).
이 답변은 "java invert boolean function"을 검색 할 때 나타납니다. 아래 예제는 분기 정적 로직으로 인해 특정 정적 분석 도구가 빌드에 실패하지 않도록합니다. 부울을 뒤집어 야하고 포괄적 인 단위 테스트를 작성하지 않은 경우에 유용합니다.)
Boolean.valueOf(aBool).equals(false)
또는 대안 적으로 :
Boolean.FALSE.equals(aBool)
또는
Boolean.FALSE::equals
Boolean.FALSE::equals
작은 람다를 작성하는 대신 매핑 함수에 전달할 수 있다는 사실을 좋아합니다
특히 전문적인 작업을 수행하지 않는 경우 항상 Util 클래스를 사용할 수 있습니다. 예를 들어, 클래스 프로젝트의 util 클래스입니다.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
그런 다음 Util 객체를 만들고
Util u = new Util();
반환 할 무언가를 갖습니다.System.out.println( u.flip(bool) );
똑같은 것을 계속 사용하려면 메소드를 사용하십시오. 특히 프로젝트 전체에 걸쳐 있다면 Util 클래스를 만드십시오. 그러나 업계 표준이 무엇인지 모르겠습니다. (경험이 풍부한 프로그래머는 자유롭게 고쳐주세요)
이 클래스 BooleanUtils
는 부울의 부정을 지원합니다. 이 클래스는 commons-lang : commons-lang에 있습니다.
BooleanUtils.negate(theBoolean)
전에:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
후:
boolean result = isresult();
result ^= true;