부울을 문자열 유형으로 변환하려고합니다 …
Boolean b = true;
String str = String.valueOf(b);
또는
Boolean b = true;
String str = Boolean.toString(b);
위 중 어느 것이 더 효율적일까요?
답변
나는 그들 사이에 큰 성능 차이가 없을 것이라고 생각하지만 나는 첫 번째 방법을 선호합니다.
당신이있는 경우 Boolean
참조를 Boolean.toString(boolean)
throw합니다 NullPointerException
참고 인 경우 null
. boolean
메서드에 전달되기 전에 참조가 unboxed됩니다 .
하지만, String.valueOf()
소스 코드 쇼 등의 방법은 명시 적으로 수행 null
체크를 :
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
이 코드를 테스트하십시오.
Boolean b = null;
System.out.println(String.valueOf(b)); // Prints null
System.out.println(Boolean.toString(b)); // Throws NPE
기본 부울의 경우 차이가 없습니다.
답변
귀하의 가치가 아니라고 확신하는 null
경우 세 번째 옵션을 사용할 수 있습니다.
String str3 = b.toString();
코드는 다음과 같습니다.
public String toString() {
return value ? "true" : "false";
}
null-safe가 되길 원한다면 String.valueOf(b)
어떤 코드가
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
보시 null
다시피 먼저 toString()
개체에 대한 메서드를 테스트 하고 나중에 호출 합니다.
호출 Boolean.toString(b)
이 호출됩니다.
public static String toString(boolean b) {
return b ? "true" : "false";
}
이는 b.toString()
JVM이 먼저 인수로 전달 될 상자를 풀어야 Boolean
하기 때문에 약간 느리지 만 상태를 유지하는 객체의 필드 를 재사용 합니다 .boolean
Boolean.toString(...)
b.toString()
private boolean value
Boolean
답변
public class Sandbox {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Boolean b = true;
boolean z = false;
echo (b);
echo (z);
echo ("Value of b= " + b +"\nValue of z= " + z);
}
public static void echo(Object obj){
System.out.println(obj);
}
}
Result -------------- true false Value of b= true Value of z= false --------------
답변
이것이 “True”또는 “TRUE”가 아닌 상수 “true”값을 얻기위한 목적이라면 다음을 사용할 수 있습니다.
Boolean.TRUE.toString();
Boolean.FALSE.toString();
답변
예를 들어 디버깅과 같은 빠른 방법을 찾고 있다면 단순히 빈 문자열을 부울에 연결할 수 있습니다.
System.out.println(b+"");
그러나 프로덕션 용도로 다른 방법을 사용하는 것이 좋습니다. 이것은 디버깅에 유용한 간단하고 빠른 솔루션입니다.
답변
“효율적”이라는 의미에 따라 다릅니다. 성능면에서 두 버전 모두 동일한 바이트 코드와 동일합니다.
$ ./javap.exe -c java.lang.String | grep -A 10 "valueOf(boolean)"
public static java.lang.String valueOf(boolean);
Code:
0: iload_0
1: ifeq 9
4: ldc #14 // String true
6: goto 11
9: ldc #10 // String false
11: areturn
$ ./javap.exe -c java.lang.Boolean | grep -A 10 "toString(boolean)"
public static java.lang.String toString(boolean);
Code:
0: iload_0
1: ifeq 9
4: ldc #3 // String true
6: goto 11
9: ldc #2 // String false
11: areturn
답변
두 가지 방법의 구현을 보면 동일하게 보입니다.
String.valueOf (b)
public static String valueOf(boolean b) {
return b ? "true" : "false";
}
부울 .toString (b)
public static String toString(boolean b) {
return b ? "true" : "false";
}
따라서 두 방법 모두 똑같이 효율적입니다.