[Java] String valueOf vs concatenation with empty string / The difference between String.valueOf and + ""
2022. 4. 25. 22:06
반응형
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
728x90
반응형
'programming language > Java' 카테고리의 다른 글
[Java] 문자열 앞뒤 공백 제거하기 trim() vs strip() 차이 / The difference between trip() and s (0) | 2022.05.04 |
---|---|
[Java] 파일 문자셋 확인 라이브러리 / Encoding Detector / juniversalchardet (0) | 2022.04.26 |
[Java] DTO(Data Transfer Object) vs VO(Value Object) (0) | 2022.04.14 |
[Java] Map 보다 DTO 클래스를 사용해야 하는 이유 (0) | 2022.04.07 |
[Java] String을 Null Safe하게 비교하기 (0) | 2022.04.05 |
Written by ner.o
개발자 네로의 개발 일기,
자바를 좋아합니다 !
댓글 개