Trong trường hợp của bạn không cần truyền, bạn cần gọi toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Vật đúc. Làm thế nào nó hoạt động?
Được:
class A {}
class B extends A {}
(A)
|
(B)
B b = new B(); //no cast
A a = b; //upcast with no explicit cast
a = (A)b; //upcast with an explicit cast
b = (B)a; //downcast
A và B trong cùng một cây thừa kế và chúng ta có thể:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Trình biên dịch phải cho phép những thứ có thể hoạt động trong thời gian chạy. Tuy nhiên, nếu trình biên dịch biết 100% rằng quá trình truyền không thể hoạt động, thì quá trình biên dịch sẽ thất bại.
Được:
class A {}
class B1 extends A {}
class B2 extends A {}
(A)
/ \
(B1) (B2)
B1 b1 = new B1();
B2 b2 = (B2)b1; // B1 can't ever be a B2
Lỗi: Không thể chuyển đổi loại B1 và B2. Trình biên dịch biết 100% rằng dàn diễn viên không thể hoạt động. Nhưng bạn có thể gian lận trình biên dịch:
B2 b2 = (B2)(A)b1;
nhưng dù sao trong thời gian chạy:
Ngoại lệ trong luồng "main" java.lang.ClassCastException: B1 không thể được truyền sang B2
trong trường hợp của bạn:
(Đối tượng)
/ \
(Số nguyên) (Chuỗi)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
trong thời gian chạy: Ngoại lệ trong luồng "main" java.lang.ClassCastException: java.lang.Integer không thể được truyền sang java.lang.String
toString()
phương thức sẽ chuyển đổi nó thành Chuỗi. Như một số câu trả lời đã chỉ ra, đó là những gì bạn nên sử dụng. (Đối với một số đối tượng,toString()
không trả lại rất hữu ích chuỗi, nhưng đối vớiInteger
, nó có thể thực hiện chính xác những gì bạn muốn.)