[java] Java int to String-Integer.toString (i) 대 새로운 Integer (i) .toString ()

때로는 자바가 나를 당혹스럽게한다.
엄청난 양의 int 초기화가 있습니다.

실제 차이점 은 무엇입니까 ?

  1. Integer.toString(i)
  2. new Integer(i).toString()


답변

Integer.toString클래스에서 정적 메서드를 호출합니다 Integer. 인스턴스가 필요하지 않습니다Integer .

호출 new Integer(i)하면 Integerint 값을 캡슐화하는 전체 Java 객체 인 유형의 인스턴스를 만듭니다 . 그런 다음 toString메소드 를 호출하여 자체 문자열 표현을 리턴하도록 요청합니다 .

원하는 모든을 인쇄하는 것이라면 int첫 번째 것이 더 가볍고 빠르며 여분의 메모리 (반환 된 문자열 제외)를 사용하지 않기 때문에 첫 번째를 사용합니다.

정수 값을 나타내는 객체 (예 : 컬렉션에 포함)를 원하면 두 번째 값을 사용합니다 int. 이는 맨손으로는 할 수없는 모든 종류의 작업을 수행 할 수있는 본격적인 객체를 제공하기 때문입니다 .


답변

new Integer(i).toString()먼저 (중복) 래퍼 객체를 만듭니다 ( i자체 래퍼 객체 일 수 있음 Integer).

Integer.toString(i) 불필요한 객체를 만들지 않기 때문에 선호됩니다.


답변

또 다른 옵션은 정적 String.valueOf방법입니다.

String.valueOf(i)

그것은 느낌 보다 약간 더 권리를 Integer.toString(i)나에게. 난의 종류가 변경되면에서 예를 들어 intdouble, 코드가 올바른 유지됩니다.


답변

  1. new Integer(i).toString();

    이 명령문은 Integer의 오브젝트를 작성한 후 해당 메소드 toString(i)를 호출하여 Integer 값의 문자열 표시리턴합니다 .

  2. Integer.toString(i);

    그것은 특정의 INT (정수)를 나타내는 String 오브젝트를 돌려줍니다 만, 여기에서 toString(int)A는 static방법.

요약은 첫 번째 경우 객체 문자열 표현을 반환하고 두 번째 경우와 마찬가지로 정수의 문자열 표현을 반환합니다.


답변

나는 또한 사용하는 것이 좋습니다

int integer = 42;
String string = integer + "";

간단하고 효과적입니다.


답변

나는 fhucho의 추천을 좋아하지만

String.valueOf(i)

아이러니는이 방법이 실제로

Integer.toString(i)

따라서 String.valueOf(i)읽는 방법이 마음에 들고 기수가 필요하지 않지만보다 효율적이지 않다는 것을 알고 있다면 사용하십시오 Integer.toString(i).


답변

성능 측정 측면에서 시간 성능을 고려중인 경우 Integer.toString (i); 1 억 회 미만을 호출하는 경우 비용이 많이 듭니다. 그렇지 않으면 1 억 회 이상의 호출이면 새로운 Integer (10) .toString () 이 더 잘 수행됩니다.

아래는 코드를 통해 성능 측정을 시도 할 수 있습니다.

public static void main(String args[]) {
            int MAX_ITERATION = 10000000;
        long starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s = Integer.toString(10);
        }
        long endtime = System.currentTimeMillis();
        System.out.println("diff1: " + (endtime-starttime));

        starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s1 = new Integer(10).toString();
        }
        endtime = System.currentTimeMillis();
        System.out.println("diff2: " + (endtime-starttime));
    }

메모리면에서

새로운 정수 (i) .toString ();

매번 객체를 생성 할 때 더 많은 메모리를 사용하므로 메모리 조각화가 발생합니다.