天天看點

Object轉為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類型的值。[color=red][/color]使用這種方法時,需要注意的是類型必須能轉成string類型。是以最好用 instanceof做個類型檢查,以判斷是否可以轉換。否則容易抛出calsscastexception異常。此外,需特别小心的是因定義為 object 類型的對象在轉成string時文法檢查并不會報錯,這将可能導緻潛在的錯誤存在。這時要格外小心。如:

object obj = new integer(100);

string strval = (string)obj;

在運作時将會出錯,因為将integer類型強制轉換為string類型,無法通過。但是,

integer obj = new integer(100);

如是格式代碼,将會報文法錯誤。

此外,因null值可以強制轉換為任何java類類型,(string)null也是合法的。

方法3:采用string.valueof(object)

string.valueof(object) 的基礎是object.tostring()。但它與object.tostring()又有所不同。在前面方法1的分析中提到,使用第一種時需保證不為 null。但采用第三種方法時,将不用擔心object是否為null值這一問題。為了便于說明問題,我們來分析一下相關的源代碼。jdk裡 string.valueof(object)源碼如下:

  /**

   * returns the string representation of the object argument.

   *

   * @param  obj  an object.

   * @return if the argument is null, then a string equal to

   *     "null"; otherwise, the value of

   *     obj.tostring() is returned.

   * @see   java.lang.object.tostring()

   */

  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,但它們意義相同嗎?

判斷一個字元串為空

s為一個字元串,判斷它為空的方法:

if   (null==s ||"".equals(s))   { 

......

  }  

注意:這裡的null==s和"".equals(s)不要寫成s==null和s.equals(s),因為""這個值是已經确定的,預知的,而s是未知的,是以用得不小心的時候s.equals("")就會出現nullpoint異常。在這裡雖然不會,因為前面有if(null==s), 但是習慣跟在那裡使用沒有關系的。不一定的equals方法,包括其它很多處理,如果用确定的值處理問題會比未确定的處理少很多bug。

string類型和date類型的互相轉換

将string轉換為date:

   string s="2007-06-21 10:50:50";

   java.text.simpledateformat   formatdate = new   java.text.simpledateformat("yyyy-mm-dd hh:mm:ss"); 

   java.util.date  date  =  formatdate.parse(s);//轉成date

将date轉換為string

string.valueof(date);

java如何獲得系統時間

最近在學習java,經常在工作中遇到一些小問題,baidu之後,找到問題的解決方法,要記錄下來呦,要不然,憑我的腦子,肯定不久就忘記了。呵呵。

想要獲得系統時間,不要日期,隻要時間,可是baidu出來的都是帶着日期和時間案的,沒有單獨隻有時間的例子。琢磨了一會之後,找到問題的解決方法。

     import java.util.date;

    import java.text.dateformat;

    date now = new date(); //  date()是java.util.date類的構造方法

    dateformat d = dateformat.gettimeinstance(); //gettimeinstance()獲得的是不帶日期的系統時間

    string str = d.format(now);

    system.out.println("today is " + str);//輸出

注:

1.date now = new date(); 這句中的date()是java.util.date類的構造方法,而不是java.sql裡的類,是以要在前面加上import java.util.date;而不是 import java.sql.date;這裡曾經因為犯了這種低級錯誤而導緻編譯出錯。

2.dateformat 中有 gettimeinstance、 getdateinstance 和 getdatetimeinstance 是用來建立一個日期-時間格式化的方法。