때로는 자바가 나를 당혹스럽게한다.
엄청난 양의 int 초기화가 있습니다.
실제 차이점 은 무엇입니까 ?
Integer.toString(i)
new Integer(i).toString()
"" + 42
더 좋지 않습니다 . StringBuilder
Integer
"" + 42
정수 문자열을 추가하는 경우 값을 추가하고 실현하지 못하게 될 수 있기 때문에 권장 하지 않습니다.
때로는 자바가 나를 당혹스럽게한다.
엄청난 양의 int 초기화가 있습니다.
실제 차이점 은 무엇입니까 ?
Integer.toString(i)
new Integer(i).toString()
"" + 42
더 좋지 않습니다 . StringBuilder
Integer
"" + 42
정수 문자열을 추가하는 경우 값을 추가하고 실현하지 못하게 될 수 있기 때문에 권장 하지 않습니다.
답변:
Integer.toString
클래스에서 정적 메서드를 호출합니다 Integer
. 인스턴스가 필요하지 않습니다Integer
.
호출 new Integer(i)
하면 Integer
int 값을 캡슐화하는 전체 Java 객체 인 유형의 인스턴스를 만듭니다 . 그런 다음 toString
메소드 를 호출하여 자체 문자열 표현을 리턴하도록 요청합니다 .
원하는 모든을 인쇄하는 것이라면 int
첫 번째 것이 더 가볍고 빠르며 여분의 메모리 (반환 된 문자열 제외)를 사용하지 않기 때문에 첫 번째를 사용합니다.
정수 값을 나타내는 객체 (예 : 컬렉션에 포함)를 원하면 두 번째 값을 사용합니다 int
. 이는 맨손으로는 할 수없는 모든 종류의 작업을 수행 할 수있는 본격적인 객체를 제공하기 때문입니다 .
또 다른 옵션은 정적 String.valueOf
방법입니다.
String.valueOf(i)
그것은 느낌 보다 약간 더 권리를 Integer.toString(i)
나에게. 난의 종류가 변경되면에서 예를 들어 int
에 double
, 코드가 올바른 유지됩니다.
나는 또한 사용하는 것이 좋습니다
int integer = 42;
String string = integer + "";
간단하고 효과적입니다.
Integer.toString()
약간의 추가 키 입력을 사용할 수 있지만 훨씬 명확합니다. 이는 코드를 유지하려는 경우 중요합니다.
toString()
메소드를 자동으로 호출하지 않습니까?
성능 측정 측면에서 시간 성능을 고려중인 경우 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 ();
매번 객체를 생성 할 때 더 많은 메모리를 사용하므로 메모리 조각화가 발생합니다.
new Integer(10).toString() can be simplified to Integer.toString(10)
보다 나은:
Integer.valueOf(i).toString()
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
"" + 42
하지만, 나야. 양식 # 2는 새로운 정수 객체 (대부분의 i 값)를 중간체로 만듭니다. 또한 타이핑이 더 많습니다.