1. 程式人生 > >string.valueof和string 的區別 遇到錯誤才記憶深刻

string.valueof和string 的區別 遇到錯誤才記憶深刻

 在java專案的實際開發和應用中,常常需要用到將物件轉為String這一基本功能。本文將對常用的轉換方法進行一個總結。

      常用的方法有Object#toString(),(String)要轉換的物件,String.valueOf(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,但它們意義相同嗎?

     以上是對object物件轉換為String的一些總結


相關推薦

string.valueofstring區別 遇到錯誤記憶深刻

在java專案的實際開發和應用中,常常需要用到將物件轉為String這一基本功能。本文將對常用的轉換方法進行一個總結。 常用的方法有Object#toString(),(String)要轉換的物件,String.valueOf(Object)等。 下面對這

Java| String.valueOfInteger.toString的區別

示例程式碼: int i = 4; String i1 = "" + i; //String i1 = (new StringBuilder()).append(i).toString(); String i2 = String.valueOf(i);

轉載:string.IsNullOrEmptystring.IsNullOrWhiteSpace方法的區別

char ace length string pty div isn 如果 使用 string.IsNullOrEmpty():判斷字符串是否為null或者為string.Empty,如果是"\t"這樣的字符就返回false,為了達到判斷過濾這些功能,就要使用Trim()和

JAVA中string.replace()string.replaceAll()的區別及用法

mod btn dsm ont match cep 產生 生成 語法 乍一看,字面上理解好像replace只替換第一個出現的字符(受javascript的影響),replaceall替換所有的字符,其實大不然,只是替換的用途不一樣。 public Strin

Java中String字符串toString()、String.valueOf()、String強轉、+ ""的區別

builder arc span 但是 內容 end hello 部分 exception Object#toString(): Object object = getObject(); System.out.println(object.toString());

string.IsNullOrEmptystring.IsNullOrWhiteSpace方法的區別

using 選擇性 功能 pos display clas msdn 如果 trim 由於原來一直都沒註意到這兩個方法,一直使用string.IsNullOrEmpty,當看到string.IsNullOrWhiteSpace時,而且在微軟人員開發的項目中經常使用時才註意到

String,StringBuilderStringBuffer區別及使用場景

面試中常常會遇到這樣的問題:1、你瞭解String類嗎?2、String,StringBuilder和StringBuffer適合在什麼樣的場景下使用? 1、String類 首先看一下Strin

Java中實現String.padLeftString.padRight

toc 還要 color for 失去 1-1 arraycopy ace pre 因為習慣了C#中的padLeft和padRight,接觸Java後突然失去這兩個功能,覺得別扭,就試著實現了這兩個方法。 Java中String.format()中帶有字符串對齊功能如下

C#實戰小技巧(九):List<string>string[]的相互轉換

List是string型別列表,string[]是string型別陣列,二者可以互相轉換。 1.string[]轉List string[] strArray = {"a", "ab", "abc"}; List<string> strList = new List<s

型別轉換toString( )、String.valueOf( )與(String)Data

toString和(String)的區別 toString( ) 每個非基本型別物件都有toString()方法,當編譯器需要一個String型別,而你只有一個物件時,該方法會被呼叫。 Object類的toString()方法返回的字串形式:類名[emai

用java String類的getBytes(String charsetName)String(byte[] bytes, String charsetName)解決亂碼問題

Java中String的資料是如何儲存的,檢視原始碼就可以知道,String的資料是儲存在char[] value這樣一個成員變數中的,char型別的大小在java中是2個位元組 我們還知道,現在普遍使用的unicode版本是UCS-2,就是使用2個位元組表示一個字元的unicode版本,這就對上了,java

深入分析String.internString常量的實現原理

背景 字串型別在實際應用場景中使用非常頻繁,如果為每個字串常量都生成一個對應的String物件,明顯會造成記憶體的浪費,針對這一

String轉long、Long.valueOf() Long.parseLong()區別

  1、java中如何將 string 轉化成 long      方法1:  long l = Long.valueOf("String");      方法2: long l = Lo

String.valueOf(object)object.toString()的區別

假設有個物件object,如果object不是null,那麼兩者是沒啥區別的。但是如果object是null,對於String.valueOf(object)返回的是null(從原始碼可以看出,已經對o

java中對於字串 XX.toStringString.valueOf()以及強制型別轉換的區別

今天在寫程式碼的時候遇到很多需要型別轉換的東西 ,特別是需要轉換到String型別。好幾次都報錯了,特此記錄一下這三者之間的區別 toString方法 先看一下API對toString方法的描述 返回該物件的字串表示。通常,toString 方法會返回一個“以文

toString()、new String()(String) 、String.ValueOf()的區別

先來看段程式碼: String str="hello"; String base64Encoded=Hex.encodeToString(str.getBytes()); String str2=new String(Hex.decode(base64En

new BigDecimal(0.01) 與 new BigDecimal(String.valueOf(0.01))的區別 (轉)

賬單 rto sta egerp 存在 調整 nan com mod 轉自:http://blog.csdn.net/major1985/article/details/50210293 一般我們使用BigDecimal進行比較精密的計算,我這裏計算金額。註意使用d

StringStringBuffer類的區別

單個 出了 字符串連接 字符 折扣 可變 ren 時間 nop 首先,String和StringBuffer主要有2個區別: (1)String類對象為不可變對象,一旦你修改了String對象的值,隱性重新創建了一個新的對象,釋放原String對象,StringBuffe

java.toString() ,(String),String.valueOf區別

不同 容易 log exc ins 例子 pre val 錯誤  在Java項目的實際開發和應用中,常常需要用到將對象轉為String這一基本功能。本文將對常用的轉換方法進行一個總結。 常用的方法有Object#toString(),(String)要轉換的

java中String new直接賦值的區別

字符串相同 main 基礎 還需 賦值 請問 常量 int 表達 Java中String new和直接賦值的區別 對於字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的