ในกรณีของคุณไม่จำเป็นต้องแคสต์คุณต้องโทรไปที่String ()
Integer i = 33;
String s = i.toString();
s = String.valueOf(i);
s = "" + i;
การคัดเลือกนักแสดง. มันทำงานอย่างไร?
ให้:
class A {}
class B extends A {}
(A)
|
(B)
B b = new B();
A a = b;
a = (A)b;
b = (B)a;
A และ B ในโครงสร้างมรดกเดียวกันและเราสามารถทำได้:
a = new A();
b = (B)a;
คอมไพเลอร์ต้องอนุญาตสิ่งต่างๆที่อาจทำงานได้ในขณะรันไทม์ อย่างไรก็ตามหากคอมไพเลอร์รู้ 100% ว่าการแคสต์ไม่สามารถทำงานได้การคอมไพเลอร์จะล้มเหลว
ให้:
class A {}
class B1 extends A {}
class B2 extends A {}
(ก)
/ \
(B1) (B2)
B1 b1 = new B1();
B2 b2 = (B2)b1;
ข้อผิดพลาด: ประเภทที่แปลงกลับไม่ได้ B1 และ B2 คอมไพเลอร์รู้ 100% ว่าการแคสต์ไม่สามารถทำงานได้ แต่คุณสามารถโกงคอมไพเลอร์ได้:
B2 b2 = (B2)(A)b1;
แต่อย่างไรก็ตามในรันไทม์:
ข้อยกเว้นในเธรด "main" java.lang.ClassCastException: B1 ไม่สามารถส่งเป็น B2
ในกรณีของคุณ:
(วัตถุ)
/ \
(จำนวนเต็ม) (สตริง)
Integer i = 33;
String s = (String)(Object)i;
ที่รันไทม์: ข้อยกเว้นในเธรด "main" java.lang.ClassCastException: java.lang.Integer ไม่สามารถส่งไปยัง java.lang.String
toString()
วิธีการที่จะแปลงเป็นสตริง ตามที่หลาย ๆ คำตอบชี้ให้เห็นนั่นคือสิ่งที่คุณควรใช้ (สำหรับวัตถุบางอย่างtoString()
ไม่ได้ส่งคืนสตริงที่มีประโยชน์มากนัก แต่สำหรับInteger
มันอาจจะทำตามที่คุณต้องการ)