네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

The difference between String.valueOf and + ""(concatenation with empty string)

일을 하다가 발견한 코드...

int seqNo = 1;
System.out.println(seqNo + "");

충격적이었다. 나는 분명 String.valueOf() 메서드나 Integer.toString() 메서드를 기대했지만 왜... + "" 나오는 것인가.

 

아무튼 String.valueOf()를 찾아봤다. 

// String.java

public static String valueOf(int i) {
    return Integer.toString(i);
}

Integer.toString()을 반환한다.

// Integer.java

public static String toString(int i) {
    if (i == Integer.MIN_VALUE)
        return "-2147483648";
    int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
    char[] buf = new char[size];
    getChars(i, size, buf);
    return new String(buf, true);
}

int 범위에 맞게 크기를 설정해주고 하나씩 넣어준다.

 

그리고 두 번째 의문, 빈 문자열을 + 연산으로 문자열 연결을 해주는 것과 String.valueOf() 메서드와의 성능 차이는 얼마나 있을까?

// 빈 문자열을 연결해줄 경우, StringBuilder를 사용해서 String을 만들어준다.
public void foo(){
    int intVar = 5;
    String strVar = intVar+"";    
}
public void foo();
  Code:
   0:   iconst_5
   1:   istore_1
   2:   new     #2;			//class java/lang/StringBuilder
   5:   dup
   6:   invokespecial   #3;	//Method java/lang/StringBuilder."<init>":()V
   9:   iload_1
   10:  invokevirtual   #4;	//Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
   13:  ldc     #5; 		//String
   15:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
   18:  invokevirtual   #7; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
   21:  astore_2
   22:  return

 

// String.valueOf()를 사용할 경우, String의 static 메서드를 사용한다.
public void bar(){
    int intVar = 5;
    String strVar = String.valueOf(intVar);
}
public void bar();
  Code:
   0:   iconst_5
   1:   istore_1
   2:   iload_1
   3:   invokestatic    #8; //Method java/lang/String.valueOf:(I)Ljava/lang/Stri
ng;
   6:   astore_2
   7:   return

 

String.valueOf() 메서드를 사용하여 문자열로 바꿔주는 것이 좀 더 효율적이다.

 

 출처 

https://stackoverflow.com/questions/7752347/string-valueof-vs-concatenation-with-empty-string

 

String valueOf vs concatenation with empty string

I am working in Java code optimization. I'm unclear about the difference between String.valueOf or the +"" sign: int intVar = 1; String strVar = intVar + ""; String strVar = String.valueOf(intVar);

stackoverflow.com

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !