때로는 자바가 나를 당혹스럽게한다.
엄청난 양의 int 초기화가 있습니다.
실제 차이점 은 무엇입니까 ?
Integer.toString(i)
new Integer(i).toString()
답변
Integer.toString
클래스에서 정적 메서드를 호출합니다 Integer
. 인스턴스가 필요하지 않습니다Integer
.
호출 new Integer(i)
하면 Integer
int 값을 캡슐화하는 전체 Java 객체 인 유형의 인스턴스를 만듭니다 . 그런 다음 toString
메소드 를 호출하여 자체 문자열 표현을 리턴하도록 요청합니다 .
원하는 모든을 인쇄하는 것이라면 int
첫 번째 것이 더 가볍고 빠르며 여분의 메모리 (반환 된 문자열 제외)를 사용하지 않기 때문에 첫 번째를 사용합니다.
정수 값을 나타내는 객체 (예 : 컬렉션에 포함)를 원하면 두 번째 값을 사용합니다 int
. 이는 맨손으로는 할 수없는 모든 종류의 작업을 수행 할 수있는 본격적인 객체를 제공하기 때문입니다 .
답변
new Integer(i).toString()
먼저 (중복) 래퍼 객체를 만듭니다 ( i
자체 래퍼 객체 일 수 있음 Integer
).
Integer.toString(i)
불필요한 객체를 만들지 않기 때문에 선호됩니다.
답변
또 다른 옵션은 정적 String.valueOf
방법입니다.
String.valueOf(i)
그것은 느낌 보다 약간 더 권리를 Integer.toString(i)
나에게. 난의 종류가 변경되면에서 예를 들어 int
에 double
, 코드가 올바른 유지됩니다.
답변
-
new Integer(i).toString();
이 명령문은 Integer의 오브젝트를 작성한 후 해당 메소드
toString(i)
를 호출하여 Integer 값의 문자열 표시 를 리턴합니다 . -
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 ();
매번 객체를 생성 할 때 더 많은 메모리를 사용하므로 메모리 조각화가 발생합니다.