Java에서 char을 String으로 변환하는 올바른 방법입니까? [복제]


20

단위 테스트를 수행 boolean하는 데 2 String초가 걸리는 함수를 테스트하는 동안 알파벳 ( 'a'- 'z') 의 모든 문자 를 하나씩 매개 변수 중 하나로 순차적으로 테스트해야 했으므로 다음과 같이 작성했습니다.

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, new String(c));
} 

나는 이것이 허용되는 줄 알았지 만 그렇지 않았기 때문에 대신 다음과 같이했다.

for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
} 

이것이 Java char에서 a 로 변환하는 신뢰할 수있는 방법 String입니까? 선호되는 방법입니까? Java에 대해 많이 알지 못하므로 이에 대한 설명이 필요합니다.


2
귀하의 질문에 직접적으로 답변하지는 않겠습니다.IntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));
Elliott Frisch

3
@ElliottFrisch 그러나 왜? 여기서 스트림은 불필요하지만 모든 루프에 스트림을 사용한다고 주장하더라도 적어도 왜 사용하지 IntStream.rangeClosed('a', 'z')않습니까?
PhilipRoman

1
하나의 '올바른'방법은 없습니다. 이것을하기위한 최소한 5 가지 방법이있을 것입니다 : 당신이 선택하는 것은 과학적 사실만큼이나 패션에 달려 있습니다. 대부분의 경우 단순히 중요하지 않으며 테스트 프로그램은 확실히 그러한 경우 중 하나입니다.
user207421

@PhilipRoman 있기 때문에 (Edmund Hillary). 내가 할 수 있기 때문에. 우리가 원하기 때문에 (빌리 파이퍼, 나는 생각합니다). 그것은 멋진 접근법이기도합니다.
엘리엇 프리쉬

나는 이것이 가능하다고 생각했을 것입니다.String 존재하지 않는 생성자 를 호출하는 것이 허용되었다고 생각 하십니까? 내가 틀렸다면 정정하십시오. 그러나 내가 아는 한, String단일 char인수 를 취하는 생성자가 클래스에 없습니다 . 참고 char로 동일하지 않습니다 char[].
아브라의

답변:


33

가장 짧은 해결책 :

char c = 'a';
String s = "" + c;

가장 깨끗하고 아마도 가장 효율적인 1 ) 솔루션 :

char c = 'a';

String s1 = String.valueOf(c);
// or
String s2 = Character.toString(c);

위의 방법은 접근 방식과 비교하여 프리미티브를 Character객체 에 상자에 넣는 오버 헤드를 방지 합니다.


1 첫 번째 접근 방식에서 문자열 연결의 약간의 비 효율성은 컴파일러 또는 런타임에 의해 최적화 될 수 있으므로 실제 성능을 결정하기 위해 마이크로 벤치 마크를 실행해야합니다. 이와 같은 마이크로 최적화는 거의 노력할 가치가 없으며 문자열 변환을 강제하기 위해 연결에 의존하는 것은 그리 좋지 않습니다.


6
나는 보았다 마지막 시간, 일의 javac컴파일러는 자동으로 변환 String s = "" + c;으로 String s = String.valueOf(c);성능이 동일 할 것이다, 그래서.
Neil

4
@ 닐 휴! 스택 오버 플로우에 해당 주석이 더 이상 존재하지 않는다고 생각하기 시작했습니다.
Robby Cornelissen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.