อะไรคือความแตกต่างระหว่าง
Object foo = "something";
String bar = String.valueOf(foo);
และ
Object foo = "something";
String bar = (String) foo;
อะไรคือความแตกต่างระหว่าง
Object foo = "something";
String bar = String.valueOf(foo);
และ
Object foo = "something";
String bar = (String) foo;
คำตอบ:
การแคสต์ไปยังสตริงจะใช้ได้เฉพาะเมื่อวัตถุนั้นเป็นสตริงเท่านั้น:
Object reallyAString = "foo";
String str = (String) reallyAString; // works.
จะไม่ทำงานเมื่อวัตถุเป็นอย่างอื่น:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()
อย่างไรก็ตามจะพยายามแปลงสิ่งที่คุณส่งผ่านไปเป็นString
ไฟล์. มันจัดการทั้ง primitives ( 42
) และ object ( new Integer(42)
โดยใช้ object นั้นtoString()
):
String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"
หมายเหตุโดยเฉพาะอย่างยิ่งตัวอย่างสุดท้าย: ผ่านnull
ไปจะกลับสตริงString.valueOf()
"null"
String.valueOf()
และobj.toString()
? (สิ่งแรกที่อยู่ในใจของฉันคือobj.toString()
จะผ่านข้อยกเว้นหากobj
เป็นโมฆะ)
null
ที่แตกต่างเป็นสิ่งที่เกิดขึ้นกับ ถ้าคุณดูที่การดำเนินการString.valueOf()
ใน JDK ของคุณคุณจะเห็นว่าทั้งหมดมันไม่อ้างอิง null toString()
ไม่ใช่คือการโทร
str = String.valueOf(null)
ใน Java 7 Update 80 มันพ่นไฟล์NullPointerException
.
String.valueOf((Object) null)
จะส่งคืน String "null" เรียกมันด้วยตัวอักษรnull
จะเรียก String # valueOf (ถ่าน []) ซึ่งอันที่จริงพ่น NPE null
เมื่อคุณผ่านใน
String.valueOf(foo)
จะเรียกfoo 's .toString()
วิธีการและกำหนดผลในการที่บาร์ เป็นโมฆะและพิมพ์การทำงานที่ปลอดภัย
การแคสต์จะกำหนดfooให้กับไฟล์แถบหากประเภทตรงกัน ClassCastException
มิฉะนั้นการแสดงออกจะโยน
String.valueOf(Object)
เรียกร้องObject.toString()
ทั้งสองสร้างเหมือนกัน การส่งออกString
ในกรณีของ
Casting
ล้มเหลวในกรณีของวัตถุที่ให้มาไม่ใช่ a string.
การแคสต์หมายความว่าออบเจ็กต์ต้องเป็นประเภท String ในขณะที่String.valueOf()
สามารถใช้ประเภทอื่นได้เช่นกัน
วิธีการ String.valueOf ใช้เพื่อรับการสร้างสตริงใหม่ของอ็อบเจ็กต์พารามิเตอร์
ค่า (String) ร่ายค่าอ็อบเจ็กต์เป็นสตริง
คุณสามารถใช้เมธอด String.valueOf เพื่อรับการแสดงสตริงของอ็อบเจ็กต์โดยไม่ต้องกังวลเกี่ยวกับการอ้างอิง null หากคุณพยายามที่จะส่ง String บนการอ้างอิง null คุณจะได้รับ NullPointerException
final Object obj = null;
final String strValOfObj = String.valueOf(obj);
final String strCastOfObj = (String) obj;
if (strValOfObj == null) System.out.println("strValOfObj is null");
if (strCastOfObj == null) System.out.println("strCastOfObj is null");
เอาท์พุต :strCastOfObj is null
อันแรกคือString.valueOf
ส่งกลับสตริงก็ต่อเมื่อวัตถุนั้นเป็นชนิดที่แสดงได้ซึ่งเป็นชนิดค่าหรือสตริง .. มิฉะนั้นจะส่งข้อยกเว้น
ในอันหลังนี้คุณกำลังแคสต์โดยตรงซึ่งอาจล้มเหลวหากวัตถุไม่ใช่สตริง
ตัวอย่างออนไลน์
ใน String.valueOf (); string as work typecasting ทุกอาร์กิวเมนต์ที่ส่งผ่านใน valueof () วิธีการแปลงใน String และเช่นเดียวกับ integer.string () แปลงจำนวนเต็มเป็นสตริงเท่านั้น