String StringBuffer StringBuilder 基础

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

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

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

String的常用方法

public class StringAPI {
	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String s1 = "hello java!";
		
		// indexOf()方法;返回指定字符串或字符在字符串中第一次出现的索引
		int index = s1.indexOf('h');// result:0
		System.out.println(index);
		index = s1.indexOf("java");// result:6
		System.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 stub
		String 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:37

		long 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类。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值