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


428

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

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

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

20
나는 그냥 사용 "" + 42하지만, 나야. 양식 # 2는 새로운 정수 객체 (대부분의 i 값)를 중간체로 만듭니다. 또한 타이핑이 더 많습니다.

16
@ pst : 중간 객체가 당신에게 문제가된다면, 중간 객체가 a보다 훨씬 무겁기 때문에 "" + 42더 좋지 않습니다 . StringBuilderInteger
Joachim Sauer

47
""+ 42가 작동하지만 나쁜 생각입니다. 나와 같은 사람들은 당신의 코드를보고 빈 문자열에 도대체 무슨 일이 있었는지 알아 내려고 노력할 것입니다.
Mainguy

3
"" + 42정수 문자열을 추가하는 경우 값을 추가하고 실현하지 못하게 될 수 있기 때문에 권장 하지 않습니다.
BoltzmannBrain

20
많은 타이핑을 좋아하지 않는다면 아마도 자바로 프로그래밍해서는 안됩니다.
Adam Pierce

답변:


548

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

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

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

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


96

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

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


43

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

String.valueOf(i)

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


2
예. RADIX를 사용해야하지 않는 한 (이 경우 Integer.toString을 사용해야 함)
marcolopes

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

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

  2. Integer.toString(i);

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

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


13

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

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

간단하고 효과적입니다.


38
이것은 자바 언어의 미묘한 부분에 의존하고 Integer.toString (i)보다 덜 효율적이기 때문에 확실히 나쁜 형태입니다. 이 SO post
rickcnagy

이것은 비효율적 일 수 있습니다. Integer.toString 또는 String.valueOf와 같은 일반적인 선택을 사용하는 것이 좋습니다. 여기를 확인하십시오 javadevnotes.com/java-integer-to-string-examples
JavaDev

직관적이지 않은 방식으로 일을하는 것은 일반적으로 나쁜 생각입니다. 보다 명확한 선택은 Integer.toString()약간의 추가 키 입력을 사용할 수 있지만 훨씬 명확합니다. 이는 코드를 유지하려는 경우 중요합니다.
Calvin Li

이것이 정수 변수의 toString()메소드를 자동으로 호출하지 않습니까?
Ankit Deshpande

11

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

String.valueOf(i)

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

Integer.toString(i)

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


4

성능 측정 측면에서 시간 성능을 고려중인 경우 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 ();

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


2
이 코드를 IntelliJ IDEA에 new Integer(10).toString() can be simplified to Integer.toString(10)
붙여넣고

이 코드는 저에게 효과적입니다. 내가 가지는 Integer.toString 420 밀리 초 (10)과 새로운 정수 525 밀리 초 (10)로 .toString ()에 대해 얻을
제이크 스티븐스 - 하스


먼저 예열하는 데 도움이되지만 그렇지 않으면 결과가 유효하지 않습니다!
sixones

한 경우에 비싸고 다른 경우에는 다른 것이 더 좋다고 말하면, 모든 상황에서 다른 하나가 더 좋거나 비싸다는 것을 의미합니다.
Sgene9

2

보다 나은:

Integer.valueOf(i).toString()

9
왜 이것이 더 낫습니까?
Emile

1
@Dhiraj가 메모리 측면에서 "new Integer (i) .toString ();"을 지적 했으므로 이것이 더 낫다고 생각합니다. Integer 값을 가져 와서 문자열로 변환하는 대신 새 객체를 생성하기 때문에 더 많은 메모리가 필요합니다.
Patricia

4
@Lucy Integer.valueOf는 (i)는 새로운 정수를 반환, 그래서 아무런 차이가 없습니다
inigoD

질문에 대한 답변을 전혀 제공하지 않습니다. 문제는 blah와 blah의 차이점이 무엇이고, blah를 더 잘 대체하는 것이 아닙니다.
ahitt6345

2

간단한 방법은 ""정수로 연결 됩니다.

int i = 100;

String s = "" + i;

지금 s해야합니다 100문자열 값으로.


1

여기에 Integer.toString클래스 정수의 정적 메소드를 호출합니다. 객체를 호출 할 필요는 없습니다.

먼저 호출 new Integer(i)하면 Integer 유형의 인스턴스를 작성하십시오. 이는 정수 값을 캡슐화하는 완전한 Java 오브젝트입니다. 그런 다음 toString메소드 를 호출하여 자체 문자열 표현을 리턴하도록 요청하십시오.


0

1.Integer.toString(i)

Integer i = new Integer(8);
    // returns a string representation of the specified integer with radix 8
 String retval = i.toString(516, 8);
System.out.println("Value = " + retval);

2.new Integer(i).toString()

 int i = 506;

String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.