Java中String、StringBuilder和StringBuffer的区别

String运行

	public static void main(String[] args) {

		String str = "abc";
		System.out.println(str);
		long a = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			str += "jk";
		}
		long b = System.currentTimeMillis();
		System.out.println(b-a);
		System.out.println(str);
	}
	最终输出结果b-a=131
	str的结果因为太多无法显示,只有abc

StringBuilder运行

	public static void main(String[] args) {
		
		StringBuilder strb = new StringBuilder("abc");
		long a = System.currentTimeMillis();
		for(int i = 0;i<10000;i++) {
			strb.append("jk");
		}
		long b = System.currentTimeMillis();
		System.out.println(strb);
		System.out.println(b-a);
	}
	最终输出结果b-a=1
	strb的结果因为太多无法显示

程序结果明显表示:StringBuilder的运行速度要远远快于String

String在java中的具体操作:

    展示String的声明方式双等号和equals的区别

	public static void main(String[] args) {

		String str1 = "aaa";
		String str2 = "aaa";
	    String str3=new String("aaa");
	    String str4=new String("aaa");
		System.out.println("===========test1============");
		if (str1 == str2) {//结果输出等于,可以看出str1跟str2是指向同一个对象
			System.out.println("1等于2");
		} else {
			System.out.println("1不等于2");
		}
		if(str3 == str4) {//结果输出不等于,可以看出用new的方式是生成不同的对象
			System.out.println("3等于4");
		}else {
			System.out.println("3不等于4");
		}
		if(str3.equals(str4)) {//结果输出等于,equals比较的是内容,==在比较基本数据类型时比较数值,比较引用类型时比较指向的对象(或者地址)
			System.out.println("3等于4");
		}else {
			System.out.println("3不等于4");
		}
	}
}

     除了String的声明方式不同外,String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。原对象会被垃圾收集器回收。所以可以说,String在第一份运行代码中,不停在创建新的对象,因此速度较慢。

    查询StringBuilder的源代码和方法,发现StringBuilder是通过append()方法直接将参数字符串追加到此序列,并没有new出新的对象,因此速度较快。

   1.String和StringBuilder的区别:

               String每次增加数据都会开辟新空间,存储数据,然后将之前的那一块空间通过GC进行回收

               StringBuilder是可变长度的,数据增加是直接在现有的空间中进行操作。

    2.StringBuilder和StringBuffer的区别查询源代码发现

               StringBuffer的源代码方法中加了synchronized,完成了类似于线程同步,防止了数据传递过程中可能出现的不理想结果(数据被改变,不是理想值)。而StringBuilder方法中并没有。

                线程安全    StringBuffer    多线程的应用程序中使用

                非线程安全  StringBuilder  单线程的应用程序中使用

                少量字符串数据          String

                大量字符串数据           StringBuilder  ,StringBuffer    

    3.三者运行速度比较

               StringBuilder-->StringBuffer-->String   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值