2016-10-31 4 views
7

이 Java 9 기능 https://bugs.openjdk.java.net/browse/JDK-8085796에 대해 읽은 것으로, StringBuilder를 사용한 '느린'문자열 연결이 향상 될 것이라고 말합니다.Java 9의 문자열 형 변환

그럼 내 질문은, 문자열에 int를 수행하는 데있어서 여전히 단점이 있는지 여부는 다음과 같습니다.

int i = 16; 
String s = ""+i; 

또는 Integer.toString(i) 또는 String.valueOf(i)를 사용하여 문자열로 캐스팅 INT의 장점/단점이있다?

편집 : 내 질문이 너무 의견을 기반으로 (sry에 대한) 나는 그것을 바꿨습니다. 나는 다른 주물의 긍정적이거나 부정적인 측면에 관심이 있습니다. 그리고 모든 사람들은 자신이 사용할 것을 결정해야합니다.

+15

짧은 예. 더 쉽게 이해할 수 있을까요? 나는 그렇게 생각하지 않는다. '정수.parseInt'는 반대 방향으로가는 붉은 청어입니다.'String.valueOf (i)'는 * 정확히 무엇을하는지 말합니다. 귀하의 목표는 문자열 연결을 수행하는 것이 아니므로 귀하의 코드에 문자열 연결이 포함되는 이유는 무엇입니까? –

+1

개선 된 것이 더 빠르다는 것을 의미하지는 않습니다. 개인적으로 나는 성능 문제가 있다는 것을 안다면''+ i''을 선호하지만 맛은 문제가됩니다. –

+1

"이해하기 쉽습니다"는 주관적입니다. – shmosel

답변

5

우선, Integer.toString(i)이 항상 ""+i보다 빠르다고 가정하지 않습니다.

가장 중요한 것은 i이 컴파일 시간 상수이면 ""+iString.valueOf(i)과 반대로됩니다. 물론 정의가 final int i=16; 인 경우 독자는 "16"이 훨씬 명확 해 지므로 ""+i을 사용하지 않을 것입니다. 그러나 만약 우리가 final int DEFAULT_USER = DEFAULT_GROUP << GROUP_BIT;에 대해 이야기하고 있다면, ""+DEFAULT_USER은 실제 숫자를 포함한 리터럴 문자열보다 훨씬 명확합니다. 그리고 컴파일 타임 상수는 성능 문제 이상의 의미를 가지며 주석 또는 case 레이블의 문자열을 switch 문으로 사용할 수 있습니다. i 만약

원칙적으로, 컴파일러는 어쨌든 Integer.toString(i)-""+i를 컴파일 할 수 있습니다, 그래서 더 필수 컴파일 된 형태는 없다 일정한 컴파일 시간이 아니다. 평범하지 않은 (또는 간단히 "straight-forward"라고 부름) 구현 new StringBuilder().append("").append(i).toString()Integer.toString(i) 변형 또는 가설적인 최적화 된 Java 9 구현과 비교하면 StringBuilder의 버퍼에서 결과 값 String의 값 배열까지의 최종 복사 작업 만 성능에 영향을 미칠 수 있지만 HotSpot JVM으로 최적화 할 수 있습니다. int의 문자열 표현이 16char의 기본 용량에 쉽게 맞기 때문에 Java 9 솔루션의 목표 인 StringBuilder의 초기 용량은 여기에 해당되지 않습니다. 당신은 성능 문제가 그것을 사용하지 않는 이유가 될 수 있도록해서는 안 ""+iInteger.toString(i)을 통해 선호하는, 그래서 만약

가장 사소 int 값의 경우, 소수점 형태로의 전환의 비용은 크게 다른 비용을보다 중요한 것입니다. 이것은 또한 Java 9 구현으로 놀라운 속도 향상을 기대해서는 안된다는 것을 의미합니다. 주요 작업은 여전히 ​​동일합니다.

은 그게 특히 관련이 (하나 개의 명령어에 배 될 것입니다, 자바 (9) 솔루션의 가장 큰 개선은 모든 문자열 연결 표현에 대해 생성 된 모든 유사한 호출 순서로 코드 크기의 감소,이다, 생각 여러 표현식의 연결). 성능을 개선 할 수있는 기회 만 좋은 추가 기능,하지만 난 개선, 특히하지 JRE (9)의 첫 번째 버전

에, 극적 기대하지 않을 것이다 그래서 ""+iInteger.toString(i) 또는 String.valueOf(i) 사이의 결정 단순히 문체에 관한 질문 일 뿐이며 (성능 문제가 아니라 여기에서 논의하지 않음)

+0

컴파일 시간 상수 사실은 verry 흥미 롭습니다. 이 상세한 답변을 보내 주셔서 감사합니다. –