java

位置:IT落伍者 >> java >> 浏览文章

JAVA中toString方法的作用


发布日期:2021年08月14日
 
JAVA中toString方法的作用
以下是对在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();
Systemoutprintln(obj);
}
}


如果某个方法里面有如下句子
A obj=new A();
Systemoutprintln(obj);
会得到输出:this is A



例子

复制代码 代码如下:
public class Orc
{
public static class A
{
public String getString()
{
return "this is A";
}
}
public static void main(String[] args)
{
A obj = new A();
Systemoutprintln(obj);
Systemoutprintln(objgetString());
}
}


会得到输出:xxxx@xxxxxxx的类名加地址形式
Systemoutprintln(objgetString());
会得到输出:this is A



看出区别了吗toString的好处是在碰到“println”之类的输出方法时会自动调用不用显式打出来

复制代码 代码如下:
public class Zhang
{
public static void main(String[] args)
{
StringBuffer MyStrBuff = new StringBuffer();
MyStrBuffappend("Hello Guys!");
Systemoutprintln(MyStrBufftoString());
MyStrBuffinsert( );
Systemoutprintln(MyStrBufftoString());
}
}


值得注意的是 若希望将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();
Systemoutprintln(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();
Systemoutprintln(MyStr);
}
}

关于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程序的性能时非常重要的

               

上一篇:Spring与Struts的结合运用

下一篇:hibernate的缓存和CRUD