String,StringBuffer,StringBuilder比较

String,StringBuffer,StringBuilder比较
1.String
创建字符串的方式有很多,归纳起来有三类:;一,使用new关键字创建字符串,例如 String s=new String(“abc”);二,直接指定,例如 String s=“abc”;三,使用字符串生成新的字符串,例如 string s =‘’‘abc’+‘’cd‘’;
字符串的一些特性,string类位于java.lang包,使用时可以直接使用,string是一个final类,不能被继承,是object的子类。string是一个引用类型,可以new创建对象,我们直接 定义的String str=‘’abc‘’ ;实际上内部 是 一个char data[]={‘a’,‘b’,‘c’}; String str=new String(data);String是一个不可变类,它的值其实是一个对象,值(对象)一旦确定就不会被改变,正常的引用类型引用的名字指针在栈里,对象在堆里,但是String比较特别直接把对象复制给了s,一般程序的执行,先找到主方法,加载main,在加载类,静态变量优先对象存在,静态变量和方法,常量 值 都存在方法区内;一般 String s=“abc”;这样创建对象它的流程是先去常量池寻找,如果没有就创建abc,找到了话直接把地址返回给s;
直接 new String创建的存储是不同的,只要new 对象,就会在堆里面创建对象,然后把常量池里的地址给堆中的对象,再在堆中把对象的应用地址放回给栈中指针s
由 基本数据型态转换成 String 的三种方式
1、toString,需要保证调用这个方法的类、方法、变量不为null,否则会报空指针。
2、String.valueOf。这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符串“null”,而如果直接传入null,则会发生错误。
3、(String) 字符串类型强转。需要保证的是类型可以转成String类型。
(String) 这是标准的类型转换,将object转成String类型的值。使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出ClassCastException异常。此外,需特别小心的是因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。如:
Object obj = new Integer(100);
String strVal = (String)obj;
在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。
 如果频繁更改字符串的值,不要用String。效率低。String是定长字符串类,不可变类,表示一个简单的字符串用String。但是如果字符串的值大量更改频繁更改,选择StringBuffer,StringBuilder。
2.StringBuffer类
a) 只能通过new创建对象。StringBuffer sf1=new StringBufer( );值可以改来改去的,且只有一个对象。StringBuffer对象是一个字符序列可变的字符串,它没有重新生成一个对象,而且在原来的对象中可以连接新的字符串。
b) 默认空串情况下具备16个字符的缓冲区。StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。
c)reverse()----->字符串反转 把StringBuffer转换成String—> sf.toString()
e) StringBuffer:线程安全的,数据准确,但是速度慢。
3.StringBuilder 类
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类
a) StringBuilder:线程非安全的,多线程环境下数据不准确,但是速度快。

猜你喜欢

转载自blog.csdn.net/zwmonk/article/details/105615768
今日推荐