IT Share you

int를 String으로 변환하는 가장 효율적인 방법은 무엇입니까?

shareyou 2020. 12. 3. 20:53
반응형

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..

참고URL : https://stackoverflow.com/questions/653990/what-is-the-most-efficient-way-to-convert-an-int-to-a-string

반응형