文章目錄
- 方法1:采用 Object#toString()方法
- 方法2:采用型別轉換(String)object方法
- 方法3:采用 String.valueOf(Object) 方法
- 方法4:采用 ""+object方法
方法1:采用 Object#toString()方法
請看下面的例子:
Object object = getObject();
System.out.println(object.toString());
在這種使用方法中,因為java.lang.Object類里已有public方法.toString(),所以對任何嚴格意義上的java物件都可以呼叫此方法,但在使用時要注意,必須保證object不是null值,否則將拋出NullPointerException例外,采用這種方法時,通常派生類會覆寫Object里的toString()方法,
方法2:采用型別轉換(String)object方法
這是標準的型別轉換,將object轉成String型別的值,使用這種方法時,需要注意的是型別必須能轉成String型別,因此最好用instanceof做個型別檢查,以判斷是否可以轉換,否則容易拋出CalssCastException例外,此外,需特別小心的是因定義為Object 型別的物件在轉成String時語法檢查并不會報錯,這將可能導致潛在的錯誤存在,這時要格外小心,如:
Object obj = new Integer(100);
String strVal = (String)obj;
在運行時將會出錯,因為將Integer型別強制轉換為String型別,無法通過,但是,
Integer obj = new Integer(100);
String strVal = (String)obj;
如是格式代碼,將會報語法錯誤,
此外,因null值可以強制轉換為任何java型別別,(String)null也是合法的,所以不會有 空指標 問題,
方法3:采用 String.valueOf(Object) 方法
String.valueOf(Object)的基礎是Object#toString(),但它與Object#toString()又有所不同,在前面方法1的分析中提到,使用后者時需保證不為null,但采用第三種方法時,將不用擔心object是否為null值這一問題,為了便于說明問題,我們來分析一下相關的源代碼,Jdk里String# valueOf(Object)原始碼如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
從上面的原始碼可以很清晰的看出null值不用擔心的理由,但是,這也恰恰給了我們隱患,我們應當注意到,當object為null時,String.valueOf(object)的值是字串”null”,而不是null!!!在使用程序中切記要注意,試想一下,如果我們用 if(String.valueOf(object)==null){System.out.println(“傳入的值是null!”);}這樣的陳述句將可能會發生什么問題,再想一下,向控制臺輸出時,在視覺上如下陳述句在執行的結果上有什么不同:
System.out.println(String.valueOf(null));
System.out.println(null);
我們看到的輸出將是一模一樣的東西:null,但它們意義不同
方法4:采用 “”+object方法
這種方法也不必擔心object為null的問題,但若object為null,會回傳"null"字串,和String.valueOf(object)一樣,
System.out.println(""+null);
System.out.println(null+"");
System.out.println("(\"\" + null)和\"null\"比較的結果為:" + (""+null).equals(null));
System.out.println("(\"\" + null)和\"null\"比較的結果為:" + (null+"").equals(null));
System.out.println("(\"\" + null)和\"null\"比較的結果為:" + "null".equals("" + null));
System.out.println("(\"\" + null)和\"null\"比較的結果為:" + "null".equals(null + "" ));
輸出結果:
null
null
("" + null)和"null"比較的結果為:false
("" + null)和"null"比較的結果為:false
("" + null)和"null"比較的結果為:true
("" + null)和"null"比較的結果為:true
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291637.html
標籤:java
