toString()方法返回反映这个对象的字符串
因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。
它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法
一toString()方法
【1】undefined和null没有toString()方法
undefined.toString();//错误 null.toString();//错误
【2】布尔型数据true和false返回对应的\'true\'和\'false\'
true.toString();//\'true\' false.toString();//\'false\' Boolean.toString();//"function Boolean() { [native code] }"
【3】字符串类型原值返回
\'1\'.toString();//\'1\' \'\'.toString();//\'\' \'abc\'.toString();//\'abc\' String.toString();//"function String() { [native code] }"
【4】数值类型的情况较复杂
Number.toString();//"function Number() { [native code] }"
1、正浮点数及NaN、Infinity加引号返回
1.23.toString();//\'1.23\' NaN.toString();//\'NaN\' Infinity.toString();//\'Infinity\'
2、负浮点数或加\'+\'号的正浮点数直接跟上.toString(),相当于先运行toString()方法,再添加正负号,转换为数字
+1.23.toString();//1.23 typeof +1.23.toString();//\'number\' -1.23.toString();//-1.23 typeof -1.23.toString();//\'number\'
3、整数直接跟上.toString()形式,会报错,提示无效标记,因为整数后的点会被识别为小数点
0.toString();//Uncaught SyntaxError: Invalid or unexpected token
因此,为了避免以上无效及报错的情况,数字在使用toString()方法时,加括号可解决
(0).toString();//\'0\' (-0).toString();//\'0\' (+1.2).toString();//\'1.2\' (-1.2).toString();//\'-1.2\' (NaN).toString();//\'NaN\'
此外,数字类型的toString()方法可以接收表示转换基数(radix)的可选参数,如果不指定此参数,转换规则将是基于十进制。同样,也可以将数字转换为其他进制数(范围在2-36)
var n = 17; n.toString();//\'17\' n.toString(2);//\'10001\' n.toString(8);//\'21\' n.toString(10);//\'17\' n.toString(12);//\'15\' n.toString(16);//\'11\'
【5】对象Object类型及自定义对象类型加括号返回[object Object]
{}.toString();//报错,Unexpected token . ({}).toString();//[object Object] ({a:123}).toString();//[object Object] Object.toString();//"function Object() { [native code] }"
function Person(){ this.name = \'test\'; } var person1 = new Person(); person1.toString();//"[object Object]"
二:toString()方法方法的用途就是为了方便操作,所以在文件操作里面可用可不用
例子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());
}
}
会得到输出:xxxx@xxxxxxx的类名加地址形式
System.out.println(obj.getString());
会得到输出:this is A
看出区别了吗,toString的好处是在碰到“println”之类的输出方法时会自动调用,不用显式打出来。
例3
值得注意的是, 若希望将StringBuffer在屏幕上显示出来, 则必须首先调用toString方法把它变成字符串常量, 因为PrintStream的方法println()不接受StringBuffer类型的参数.
1 public class Zhang 2 3 { 4 5 public static void main(String[] args) 6 7 { 8 9 StringBuffer MyStrBuff1 = new StringBuffer(); 10 11 MyStrBuff1.append("Hello, Guys!"); 12 13 System.out.println(MyStrBuff1.toString()); 14 15 MyStrBuff1.insert(6, 30); 16 17 System.out.println(MyStrBuff1.toString()); 18 19 } 20 21 }
toString()方法在此的作用是将StringBuffer类型转换为String类型.
1 public class Zhang 2 { 3 public static void main(String[] args) 4 { 5 String MyStr = new StringBuffer().append("hello").toString(); 6 MyStr = new StringBuffer().append(MyStr).append(" Guys!").toString(); 7 System.out.println(MyStr); 8 } 9 }
三:关于String ,StringBuffer和StringBuilder的性能