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)나에게. 난의 종류가 변경되면에서 예를 들어 int에 double, 코드가 올바른 유지됩니다.


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.