a boolean
를 int
Java 로 변환하는 가장 널리 사용되는 방법은 무엇입니까 ?
a boolean
를 int
Java 로 변환하는 가장 널리 사용되는 방법은 무엇입니까 ?
답변:
int myInt = myBoolean ? 1 : 0;
^^
PS : true = 1 및 false = 0
(foo && (!bar || baz)) ? 1 : 0
. 분명히 그것이 식별자 일 경우, 파렌은 필요하지 않거나 바람직하지 않습니다.
(boolean expression) ? 1 : 0;
에게는 더 이해할 수 있습니다. my
접두사가 변수처럼 보이게 했다고 생각 합니다.
foo && (!bar || baz) ? 1 : 0
구문 오류입니다. (6 년이
삼항 연산자를 사용하는 것은 원하는 것을 수행하는 가장 간단하고 효율적이며 읽기 쉬운 방법입니다. 이 솔루션을 사용하는 것이 좋습니다.
그러나 나는 대안 적이며, 고 안되고, 비효율적이며 읽을 수없는 대안을 제안하는 것에 저항 할 수 없다.
int boolToInt(Boolean b) {
return b.compareTo(false);
}
이봐, 사람들은 멋진 답변에 투표하고 싶어!
편집하다
그건 그렇고, 나는 종종 두 가지 값 (일반적으로 compareTo
방법 구현에서 )을 비교하기위한 목적으로 부울에서 int로 변환하는 것을 종종 보았습니다 . Boolean#compareTo
그러한 특정한 경우에가는 길입니다.
편집 2
Java 7은 기본 유형과 직접 작동하는 새로운 유틸리티 기능을 도입했습니다 Boolean#compare
(감사합니다 shmosel ).
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
오토 박싱을 사용 하거나 피할 수 있습니다 . 2. 설명서는 Boolean.compareTo()
1을 반환한다고 말하지 않고 "이 개체가 true를 나타내고 인수가 false를 나타내는 경우 양수"만 반환합니다.
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;
int y= BooleanUtils.toInteger(x);
BooleanUtils.toInteger
는 그대로 구현됩니다 return bool ? 1 : 0;
.
상황에 따라 다릅니다. 이해하기 쉽기 때문에 가장 간단한 방법이 가장 좋습니다.
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
또는
int otherThing = something ? 1 : 0;
그러나 때로는 부울 플래그 대신 Enum을 사용하는 것이 유용합니다. 동기식 및 비동기식 프로세스가 있다고 상상해보십시오.
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
Java에서 enum은 추가 속성 및 메소드를 가질 수 있습니다.
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
는 if 블록 안에 중단 점을 둘 수 있기 때문입니다 .
Apache Commons Lang 을 사용하는 경우 (많은 프로젝트에서 사용한다고 생각합니다) 다음과 같이 사용할 수 있습니다.
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
메소드 boolean_expression
는 true이면 1을 , 그렇지 않으면 0을 리턴합니다.
BooleanUtils.toInteger
는 그대로 구현됩니다 return bool ? 1 : 0;
.
난독 화하려면 다음을 사용하십시오.
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
를 사용하여 트릭을 재생할 수 있습니다 Boolean.compare(boolean, boolean)
. 함수의 기본 동작 : 두 값이 모두 같으면 else를 반환 0
합니다 -1
.
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
설명 : 우리는 Boolean.compare의 기본 반환을 알다시피 -1 +1 메이크업 반환 값 때문에에 잘못 일치의 경우 0 에 대한 False
및 1 에 대한True
Boolean.compare(myBoolean, false)
인용 된 설명에 더 잘 맞을 것입니다
값을 캐스팅하기 위해 if 문 주위에 래퍼 메서드를 작성해야한다는 사실은 java가 이미 죽어야하는 이유의 이미 큰 목록에 추가합니다. 그리고 삼항 연산자가 함수에 싸여 있지 않고 어디서나 붙여 넣기 만하면 부울 캐스트를 사용하여 견딜 수 있습니다. CPU 사이클을 낭비하고 코드 가독성을 모욕합니다.
또한 대부분의 답변에는 설명이없는 수백 개의 공감대가 있습니다. 나쁜 연습은 단지 자바에 너무 많이 노출 된 결과라고 생각합니다. 부울을 현대 언어로 int로 캐스팅하기 위해 삼항 연산자를 작성하면 다음 날 내가 할 수있는 일에서 해고 될 것입니다. 그래서 오늘 나는 자바 과제로 이유를 사용하려고 포기하고 어리 석음을 수용하기로 결정했습니다.
public static int booltoint(boolean nonsense) {
// Let's start with indenting using spaces, 16 of them to be precise
String[] ____int = new String[500];
____int[0] = Boolean.toString(nonsense);
try {
Thread.sleep(100);
} catch (Exception e) { }
Random rand = new Random();
int n = rand.nextInt((int)1e9);
int result = 0;
int other_Result = 1;
for (int i = -5; i < 2; i++) {
try {
if (n == 35467247) return 5; // let's just fail with one in a billion chance
if ((5 - ____int[i].length()) == 1) {
return ++result;
} else if(____int[i] == "false") {
return --other_Result;
}
} catch (Exception e) {
// This method will throw an exception 5 times every single time I
// cast a boolean to int before returning an integer
}
}
return (int)1e35;}
true
하고false
각각?