以下是對在JAVA中toString方法的作用進行了詳細的分析介紹
需要的朋友可以參考下
因為它是Object裡面已經有了的方法而所有類都是繼承Object所以“所有對象都有這個方法”
它通常只是為了方便輸出比如Systemoutprintln(xx)括號裡面的“xx”如果不是String類型的話就自動調用xx的toString()方法
總而言之它只是sun公司開發java的時候為了方便所有類的字符串操作而特意加入的一個方法
回答補充
寫這個方法的用途就是為了方便操作所以在文件操作裡面可用可不用
例子
復制代碼 代碼如下:
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();
Systemoutprintln(obj);
會得到輸出:this is A
![](http://tw.wingwit.com/Article/UploadFiles/201311/2013111512140349.jpg)
例子
復制代碼 代碼如下:
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());
}
}
會得到輸出:xxxx@xxxxxxx的類名加地址形式
Systemoutprintln(objgetString());
會得到輸出:this is A
![](http://tw.wingwit.com/Article/UploadFiles/201311/2013111512140372.jpg)
看出區別了嗎toString的好處是在碰到“println”之類的輸出方法時會自動調用不用顯式打出來
復制代碼 代碼如下:
public class Zhang
{
public static void main(String[] args)
{
StringBuffer MyStrBuff
= new StringBuffer();
MyStrBuff
append("Hello
Guys!");
System
out
println(MyStrBuff
toString());
MyStrBuff
insert(
);
System
out
println(MyStrBuff
toString());
}
}
值得注意的是 若希望將StringBuffer在屏幕上顯示出來 則必須首先調用toString方法把它變成字符串常量 因為PrintStream的方法println()不接受StringBuffer類型的參數
![在新窗口打開圖片](http://tw.wingwit.com/Article/UploadFiles/201311/2013111512140344.jpg)
復制代碼 代碼如下:
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類型
![在新窗口打開圖片](http://tw.wingwit.com/Article/UploadFiles/201311/2013111512140371.jpg)
復制代碼 代碼如下:
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);
}
}
![在新窗口打開圖片](http://tw.wingwit.com/Article/UploadFiles/201311/2013111512140390.jpg)
關於String StringBuffer的性能
通過使用一些輔助性工具來找到程序中的瓶頸然後就可以對瓶頸部分的代碼進行優化一般有兩種方案即優化代碼或更改設計方法我們一般會選擇後者因為不去調用以下代碼要比調用一些優化的代碼更能提高程序的性能而一個設計良好的程序能夠精簡代碼從而提高性能
下面將提供一些在JAVA程序的設計和編碼中為了能夠提高JAVA程序的性能而經常采用的一些方法和技巧
.對象的生成和大小的調整
JAVA程序設計中一個普遍的問題就是沒有好好的利用JAVA語言本身提供的函數從而常常會生成大量的對象(或實例)由於系統不僅要花時間生成對象以後可能還需花時間對這些對象進行垃圾回收和處理因此生成過多的對象將會給程序的性能帶來很大的影響
例關於String StringBuffer+和append
JAVA語言提供了對於String類型變量的操作但如果使用不當會給程序的性能帶來影響如下面的語句
String name=new String("HuangWeiFeng");
Systemoutprintln(name+"is my name");
看似已經很精簡了其實並非如此為了生成二進制的代碼要進行如下的步驟和操作
() 生成新的字符串 new String(STR_);
() 復制該字符串;
() 加載字符串常量"HuangWeiFeng"(STR_);
() 調用字符串的構架器(Constructor);
() 保存該字符串到數組中(從位置開始);
() 從javaioPrintStream類中得到靜態的out變量;
() 生成新的字符串緩沖變量new StringBuffer(STR_BUF_);
() 復制該字符串緩沖變量;
() 調用字符串緩沖的構架器(Constructor);
() 保存該字符串緩沖到數組中(從位置開始);
() 以STR_為參數調用字符串緩沖(StringBuffer)類中的append方法;
() 加載字符串常量"is my name"(STR_);
() 以STR_為參數調用字符串緩沖(StringBuffer)類中的append方法;
() 對於STR_BUF_執行toString命令;
() 調用out變量中的println方法輸出結果
由此可以看出這兩行簡單的代碼就生成了STR_STR_STR_STR_和STR_BUF_五個對象變量這些生成的類的實例一般都存放在堆中堆要對所有類的超類類的實例進行初始化同時還要調用類極其每個超類的構架器而這些操作都是非常消耗系統資源的因此對對象的生成進行限制是完全有必要的
經修改上面的代碼可以用如下的代碼來替換
StringBuffer name=new StringBuffer("HuangWeiFeng");
Systemoutprintln(nameappend("is my name")toString());
系統將進行如下的操作
() 生成新的字符串緩沖變量new StringBuffer(STR_BUF_);
() 復制該字符串緩沖變量;
() 加載字符串常量"HuangWeiFeng"(STR_);
() 調用字符串緩沖的構架器(Constructor);
() 保存該字符串緩沖到數組中(從位置開始);
() 從javaioPrintStream類中得到靜態的out變量;
() 加載STR_BUF_;
() 加載字符串常量"is my name"(STR_);
() 以STR_為參數調用字符串緩沖(StringBuffer)實例中的append方法;
() 對於STR_BUF_執行toString命令(STR_);
()調用out變量中的println方法輸出結果
由此可以看出經過改進後的代碼只生成了四個對象變量STR_STR_STR_和STR_BUF_你可能覺得少生成一個對象不會對程序的性能有很大的提高但下面的代碼段的執行速度將是代碼段的倍因為代碼段生成了八個對象而代碼段只生成了四個對象
代碼段
String name= new StringBuffer("HuangWeiFeng");
name+="is my";
name+="name";
代碼段
StringBuffer name=new StringBuffer("HuangWeiFeng");
nameappend("is my");
nameappend("name")toString();
因此充分的利用JAVA提供的庫函數來優化程序對提高JAVA程序的性能時非常重要的
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20542.html