淺析JAVA中toString方法的作用

淺析JAVA中toString方法的作用

因為它是Object裡面已經有了的方法,而所有類都是繼承Object,所以“所有物件都有這個方法”。

它通常只是為了方便輸出,比如System.out.println(xx),括號裡面的“xx”如果不是String型別的話,就自動呼叫xx的toString()方法

總而言之,它只是sun公司開發java的時候為了方便所有類的字串操作而特意加入的一個方法
 
回答補充:
寫這個方法的用途就是為了方便操作,所以在檔案操作裡面可用可不用
例子1:
複製程式碼 程式碼如下:
public class Orc
{
       public static class A
       {
              public String toString()
              {
                     return “this is A”;
              }
       }
       public static void main(String[] args)
       {
              A obj = new A();
              System.out.println(obj);
       }
}

如果某個方法裡面有如下句子:
A obj=new A();
System.out.println(obj);
會得到輸出:this is A

例子2:
複製程式碼 程式碼如下:
public class Orc
{
       public static class A
       {
              public String getString()
              {
                     return “this is A”;
              }
       }
       public static void main(String[] args)
       {
              A obj = new A();
              System.out.println(obj);
              System.out.println(obj.getString());
       }
}

會得到輸出:[email protected]的類名加地址形式
System.out.println(obj.getString());
會得到輸出:this is A

看出區別了嗎,toString的好處是在碰到“println”之類的輸出方法時會自動呼叫,不用顯式打出來。
複製程式碼 程式碼如下:
public class Zhang
{
       public static void main(String[] args)
       {
              StringBuffer MyStrBuff1 = new StringBuffer();
              MyStrBuff1.append(“Hello, Guys!”);
              System.out.println(MyStrBuff1.toString());
              MyStrBuff1.insert(6, 30);
              System.out.println(MyStrBuff1.toString());
       }
}

值得注意的是, 若希望將StringBuffer在螢幕上顯示出來, 則必須首先呼叫toString方法把它變成字串常量, 因為PrintStream的方法println()不接受StringBuffer型別的引數.

複製程式碼 程式碼如下:
public class Zhang
{
    public static void main(String[] args)
    {
        String MyStr = new StringBuffer();
        MyStr = new StringBuffer().append(MyStr).append(” Guys!”).toString();
        System.out.println(MyStr);       
    }
}

toString()方法在此的作用是將StringBuffer型別轉換為String型別.

複製程式碼 程式碼如下:
public class Zhang
{
    public static void main(String[] args)
    {
        String MyStr = new StringBuffer().append(“hello”).toString();
        MyStr = new StringBuffer().append(MyStr).append(” Guys!”).toString();
        System.out.println(MyStr);       
    }
}

關於String ,StringBuffer的效能

通過使用一些輔助性工具來找到程式中的瓶頸,然後就可以對瓶頸部分的程式碼進行優化。一般有兩種方案:即優化程式碼或更改設計方法。我們一般會選擇後者,因為不去呼叫以下程式碼要比呼叫一些優化的程式碼更能提高程式的效能。而一個設計良好的程式能夠精簡程式碼,從而提高效能。

下面將提供一些在JAVA程式的設計和編碼中,為了能夠提高JAVA程式的效能,而經常採用的一些方法和技巧。

1.物件的生成和大小的調整。

JAVA程式設計中一個普遍的問題就是沒有好好的利用JAVA語言本身提供的函式,從而常常會生成大量的物件(或例項)。由於系統不僅要花時間生成物件,以後可能還需花時間對這些物件進行垃圾回收和處理。因此,生成過多的物件將會給程式的效能帶來很大的影響。

例1:關於String ,StringBuffer, 和append

JAVA語言提供了對於String型別變數的操作。但如果使用不當,會給程式的效能帶來影響。如下面的語句:

String name=new String(“HuangWeiFeng”);

System.out.println(name “is my name”);

看似已經很精簡了,其實並非如此。為了生成二進位制的程式碼,要進行如下的步驟和操作:

(1) 生成新的字串 new String(STR_1);

(2) 複製該字串;

(3) 載入字串常量”HuangWeiFeng”(STR_2);

(4) 呼叫字串的構架器(Constructor);

(5) 儲存該字串到陣列中(從位置0開始);

(6) 從java.io.PrintStream類中得到靜態的out變數;

(7) 生成新的字串緩衝變數new StringBuffer(STR_BUF_1);

(8) 複製該字串緩衝變數;

(9) 呼叫字串緩衝的構架器(Constructor);

(10) 儲存該字串緩衝到陣列中(從位置1開始);

(11) 以STR_1為引數,呼叫字串緩衝(StringBuffer)類中的append方法;

(12) 載入字串常量”is my name”(STR_3);

(13) 以STR_3為引數,呼叫字串緩衝(StringBuffer)類中的append方法;

(14) 對於STR_BUF_1執行toString命令;

(15) 呼叫out變數中的println方法,輸出結果。

由此可以看出,這兩行簡單的程式碼,就生成了STR_1,STR_2,STR_3,STR_4和STR_BUF_1五個物件變數。這些生成的類的例項一般都存放在堆中。堆要對所有類的超類,類的例項進行初始化,同時還要呼叫類極其每個超類的構架器。而這些操作都是非常消耗系統資源的。因此,對物件的生成進行限制,是完全有必要的。

經修改,上面的程式碼可以用如下的程式碼來替換。

StringBuffer name=new StringBuffer(“HuangWeiFeng”);

System.out.println(name.append(“is my name.”).toString());

系統將進行如下的操作:

(1) 生成新的字串緩衝變數new StringBuffer(STR_BUF_1);

(2) 複製該字串緩衝變數;

(3) 載入字串常量”HuangWeiFeng”(STR_1);

(4) 呼叫字串緩衝的構架器(Constructor);

(5) 儲存該字串緩衝到陣列中(從位置1開始);

(6) 從java.io.PrintStream類中得到靜態的out變數;

(7) 載入STR_BUF_1;

(8) 載入字串常量”is my name”(STR_2);

(9) 以STR_2為引數,呼叫字串緩衝(StringBuffer)例項中的append方法;

(10) 對於STR_BUF_1執行toString命令(STR_3);

(11)呼叫out變數中的println方法,輸出結果。

由此可以看出,經過改進後的程式碼只生成了四個物件變數:STR_1,STR_2,STR_3和STR_BUF_1.你可能覺得少生成一個物件不會對程式的效能有很大的提高。但下面的程式碼段2的執行速度將是程式碼段1的2倍。因為程式碼段1生成了八個物件,而程式碼段2只生成了四個物件。

程式碼段1:

String name= new StringBuffer(“HuangWeiFeng”);

name =”is my”;

name =”name”;

程式碼段2:

StringBuffer name=new StringBuffer(“HuangWeiFeng”);

name.append(“is my”);

name.append(“name.”).toString();

因此,充分的利用JAVA提供的庫函式來優化程式,對提高JAVA程式的效能時非常重要的.

您可能感興趣的文章:

java中的 toString()方法例項程式碼java中的equals()和toString()方法例項詳解java tostring方法重寫程式碼示例