Những cách thông thường sẽ là Integer.toString(i)
hoặc String.valueOf(i)
.
Sự kết hợp sẽ có hiệu quả, nhưng nó là độc đáo và có thể là một mùi hôi vì nó cho thấy tác giả không biết về hai phương pháp trên (những gì họ có thể không biết?).
Java có hỗ trợ đặc biệt cho toán tử + khi được sử dụng với các chuỗi (xem tài liệu ) dịch mã bạn đã đăng vào:
StringBuilder sb = new StringBuilder();
sb.append("");
sb.append(i);
String strI = sb.toString();
tại thời gian biên dịch. Nó hơi kém hiệu quả ( sb.append()
kết thúc cuộc gọi Integer.getChars()
, đó là những gì Integer.toString()
sẽ làm dù sao), nhưng nó hoạt động.
Để trả lời nhận xét của Grodriguez: ** Không, trình biên dịch không tối ưu hóa chuỗi trống trong trường hợp này - xem:
simon@lucifer:~$ cat TestClass.java
public class TestClass {
public static void main(String[] args) {
int i = 5;
String strI = "" + i;
}
}
simon@lucifer:~$ javac TestClass.java && javap -c TestClass
Compiled from "TestClass.java"
public class TestClass extends java.lang.Object{
public TestClass();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_5
1: istore_1
Khởi tạo StringBuilder:
2: new #2; //class java/lang/StringBuilder
5: dup
6: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
Nối chuỗi trống:
9: ldc #4; //String
11: invokevirtual #5; //Method java/lang/StringBuilder.append:
(Ljava/lang/String;)Ljava/lang/StringBuilder;
Nối số nguyên:
14: iload_1
15: invokevirtual #6; //Method java/lang/StringBuilder.append:
(I)Ljava/lang/StringBuilder;
Trích xuất chuỗi cuối cùng:
18: invokevirtual #7; //Method java/lang/StringBuilder.toString:
()Ljava/lang/String;
21: astore_2
22: return
}
Có một đề xuất và công việc đang diễn ra để thay đổi hành vi này, được nhắm mục tiêu cho JDK 9.