String StringBuffer StringBuilder 基础

来源:互联网 发布:ipad和手机同时上淘宝 编辑:程序博客网 时间:2024/05/16 12:30

String 不可改变类,任何对String对象的改变只会生成新的String对象。

StringBuffer可变类,任何对它所指代的字符串的改变都不会产生新的对象。(线程安全)

StringBuilder可变类,JDK5.0 引入,任何对它所指代的字符串的改变都不会产生新的对象。(线程不安全)

String的常用方法

public class StringAPI {public static void main(String[] args) {// TODO Auto-generated method stubString s1 = "hello java!";// indexOf()方法;返回指定字符串或字符在字符串中第一次出现的索引int index = s1.indexOf('h');// result:0System.out.println(index);index = s1.indexOf("java");// result:6System.out.println(index);// charAt(); 将指定索引处的字符去除来;char c1=s1.charAt(6);//result:j    System.out.println(c1);    // substring()方法; 截取字符串的方法;// 指定一个索引值认为开始截取的位置(包含当前索引处字符)String sb1 = s1.substring(0);// reuslt:"hello java!"System.out.println(sb1);// 指定开始的索引值和结束的索引值(包含开始的字符不包含结束处的字符);String sb2 = s1.substring(6, 10);// 结果为"java"没有"!"号System.out.println(sb2);//split()方法; 以指定字符或字符串将一个字符串分割成字符串数组; String s2="aaa bbb ccc ddd fff"; String [] st=s2.split(" "); for(String s3:st){ System.out.println(s3);  } //字符串的比较方法 String s4="aaa"; String s5="AAA"; //equals() 常规比较方法 System.out.println("aaa".equals(s4));  //equalsIgnoreCase() 不区分大小写的比较俩个字符 System.out.println("AAA".equalsIgnoreCase(s4));  //toLowerCase() 将字符串所有字母转换为小写;   s5= s5.toLowerCase(); System.out.println("aaa".equals(s5));  // toUpperCase();将字符串所有字母转换为大写; s4 = s4.toUpperCase(); System.out.println("AAA".equals(s4));  //trim(); 去除字符串前后的空格 String s6=" aaa ";       s6=s6.trim(); System.out.println("aaa".equals(s6)); //compareTo();比较字符串的先后顺序方法 根据每个字符的Unicode 逐一比较 String s7="abc"; String s8="def"; String s9="abc"; String s10="aab";System.out.println(s7.compareTo(s8));//结果小于0 说明前一个字符在后一个字符之前System.out.println(s7.compareTo(s9));//结果等于0 说明字符串相等System.out.println(s7.compareTo(s10));//结果大于0 说明前一个字符在后一个字符之后 // 扩展 StringBuffer类的 字符串反转 reverse(); String s11="abcdef"; StringBuffer s12=new StringBuffer(s11); s11= s12.reverse().toString(); System.out.println(s11);//result:"fedcba";}}

String与StringBuffer的效率

通过对相同字符串的操作时间的差别来检测两者的执行效率如下:
import java.security.Timestamp;public class StringBufferTest {public static void main(String[] args) {// TODO Auto-generated method stubString str = null;StringBuffer stb = new StringBuffer();long time = System.currentTimeMillis();for (int i = 1; i < 10000; i++) {str = i + "";}System.out.println(System.currentTimeMillis() - time);// result:37long time1 = System.currentTimeMillis();for (int j = 1; j < 10000; j++) {stb.append(j + "");}System.out.println(System.currentTimeMillis() - time1);// result:12// 显然StringBuffer比String的执行时间短,效率高很多}}

StringBuffer与StringBuilder的区别

两者的的继承的API 是没什么区别的,主要就是StringBuffer是线程安全的也就是说他的一些方法是定义为synchronized方法,而StringBuilder是线程不安全的也就是说不存在synchronized方法,因为不存在线程同步的一些定义所以执行效率上要比StringBuffer稍高些,在不存在线程的同步的单线程操作数据时多选用StringBuilder类。



0 0