int를 String으로 변환하는 가장 효율적인 방법은 무엇입니까?
내가 가지고 있다고 :
int someValue = 42;
이제 그 int 값을 String으로 변환하고 싶습니다. 어느 쪽이 더 효율적입니까?
// One
String stringValue = Integer.toString(someValue);
// Two
String stringValue = String.valueOf(someValue);
// Three
String stringValue = someValue + "";
진짜 차이가 있는지 아니면 하나가 다른 것보다 나은지 궁금합니다.
숫자 10의 10m 할당에 대해 테스트했습니다.
One:
real 0m5.610s
user 0m5.098s
sys 0m0.220s
Two:
real 0m6.216s
user 0m5.700s
sys 0m0.213s
Three:
real 0m12.986s
user 0m11.767s
sys 0m0.489s
하나는이기는 것 같다
편집 : JVM은 Mac OS X 10.5에서 표준 '/ usr / bin / java'입니다.
Java 버전 "1.5.0_16" Java (TM) 2 Runtime Environment, Standard Edition (빌드 1.5.0_16-b06-284) Java HotSpot (TM) Client VM (빌드 1.5.0_16-133, 혼합 모드, 공유)
추가 편집 :
요청 된 코드
public class One {
public static void main(String[] args) {
int someValue = 10;
for (int i = 0; i < 10000000; i++) {
String stringValue = Integer.toString(someValue);
}
}
}
사례 2와 3은 비슷하게
다음을 사용하여 실행합니다.
javac *.java; time java One; time java Two; time java Three
cobbal 의 측정에 따르면 # 1이 가장 빠른 것 같지만 String.valueOf()
. 그 이유는이 호출에 인수 유형이 명시 적으로 포함되어 있지 않기 때문에 나중에 int에서 double로 변경하기로 결정하면이 호출을 수정할 필요가 없습니다. # 2에 비해 # 1의 속도 향상은 미미하며 우리 모두가 알고 있듯이 "조기 최적화는 모든 악의 근원"입니다.
세 번째 해결책은 묵시적으로 a를 만들고 StringBuilder
구성 요소 (이 경우 숫자와 빈 문자열)를 추가하고 마지막으로이를 문자열로 변환하기 때문에 의문의 여지가 없습니다 .
The first two examples are actually identical, since String.valueOf(int) uses the Integer.toString(int) method. The third is ugly, and probably less efficient since concatenation is slow in Java.
Look at the source code of the JRE and you'll probably see the difference. Or none. In fact the Strinv.valueOf(int foo) is implemented as follows:
public static String valueOf(int i) {
return Integer.toString(i, 10);
}
and the Integer.toString(int foo, int radix)
public static String toString(int i, int radix) {
...
if (radix == 10) {
return toString(i);
}
...
}
Which means that if you use the radix 10, you better call the Integer.toString(int foo) directly. For the other cases use the Integer.toString(int foo, int radix).
The concat solution first transforms the int value into a String and later concatenates with the empty String. This obviously is the most expensive case.
(Opposite of David Hanak.)
Even though according to the measurements of cobbal, #1 seems to be the fastest, I'd strongly recommend the usage of Integer.toString(). My reason for that is that this call explicitly contains the type of the argument, so if later on you decide to change it from int to double, it is clear that this call has changed. You would do the same if it was a binary format, wouldn't you? The speed gain on #1 compared to #2 is only minimal, and as we all know, "premature optimization is the root of all evil".
"" + int
is slower as shown above by David Hanak.
String.valueOf()
inturn calls Integer.toString()
. Hence, using Integer.toString()
is better.
So, Integer.toString()
is the fastest..
'IT Share you' 카테고리의 다른 글
신속하게 새 라인을 만드는 방법 (0) | 2020.12.03 |
---|---|
출력을 / dev / null로 리디렉션하더라도 printf에 여전히 비용이 발생합니까? (0) | 2020.12.03 |
net.pipe 대 net.tcp 대 http 바인딩 (0) | 2020.12.03 |
onClick (DialogInterface v, int buttonId) 내에서 컨텍스트를 얻습니까? (0) | 2020.12.03 |
메모리의 목록 크기 (0) | 2020.12.03 |