Java中String类StringBuffer类和StringBuilder类的区别

首先阐述String类和StringBuffer类的区别,String类是常量,不能添加,而StringBuffer则是一个字符缓冲区,可以往里面添加字符串。比如说:

<span style="font-size:18px;">String str = "helloworld";

str += "welcome";</span>

这里其实过程是这样的:生成了String对象 "helloworld" 引用由str持有, 当执行 str += "welcome" ; 这行代码的时候其实是废弃了 原来的 "helloworld"对象 然后产生了新的拼接之后的对象,然后把引用赋给了str。 所以过程中又生成了新的String类型的对象,然后原来的对象就要被垃圾回收器回收。肯定是要影响程序的性能。

那么,我们现在再来看一看StringBuffer的做法

<span style="font-size:18px;">StringBuffer sb  = new StringBuffer("helloworld");

sb.append("welcome");</span>

StringBuffer的过程是这样的。首先构造出一个StringBuffer对象,在缓冲区中,让后可以在缓冲区中直接添加指定的字符串序列。

还有一种写法肯定是错的 :

StringBuffer sb = new StringBuffer();

sb = "helloworld";   //字符串对象怎么能赋给StringBuffer对象呢?

然后下面的测试String  类和StringBuffer类的性能测试代码段

执行效果不绝对,因每一台机子的硬件配置而定。

首先是String类的性能

<span style="font-size:18px;">/* 本代码段测试String类的性能   约2854毫秒
		String tempValue = "helloworld";

  		int times = 10000;

		String value = "";

		long startTime = System.currentTimeMillis();

		for(int i = 0 ;i < times ; i++)
		{
			value += tempValue;
		}

		long endTime = System.currentTimeMillis();

		System.out.println(endTime - startTime);

		*/</span>

然后是StringBuffer类

<span style="font-size:18px;">/* 本代码段用于测试StringBuffer类的性能   约为10毫秒
		String tempValue = "helloworld";

		int times = 10000;

		StringBuffer sb = new StringBuffer();

		long startTime = System.currentTimeMillis();

		for(int i = 0 ; i < times ; i++)
		{
			sb.append(tempValue);
		}

		long endTime = System.currentTimeMillis();

		System.out.println(endTime - startTime);

		*/</span>

在一个就是StringBuilder 和StringBuffer类的比较

怎么说的StringBuilder类是从JDK5.0开始出现的类。用来替代StringBuffer 。但是不保证线程安全。如果你需要这种同步,请使用StringBuffer类,StringBuilder类是线程不安全的。而StringBuffer是线程安全的。

性能上来说StringBuilder是比StringBuffer的性能要强那么一点点,但是两个类总体上的使用方法是差不多的。

一下是测试StringBuilder类的性能的测试代码段。

<span style="font-size:18px;">/* 本代码段用于测试 StringBuilder类的性能  约10毫秒

		String tempValue = "helloworld";

		int times = 10000;

		StringBuilder sb = new StringBuilder();

		long startTime  = System.currentTimeMillis();

		for(int i = 0 ; i < times ; i++)
		{
			sb.append(tempValue);
		}
		long endTime = System.currentTimeMillis();

		System.out.println(endTime - startTime);
		*/</span>

综上所述:如果你使用的是常量的要多一些,还请使用String类 ,如果经常改变值,还请使用StringBuffer 或StringBuilder。

一般来说性能上 StringBuilder  > StringBuffer > String

时间: 2024-10-12 09:34:54

Java中String类StringBuffer类和StringBuilder类的区别的相关文章

Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在Abstra

java中String、StringBuffer、StringBuilder的区别

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在Abstra

Java基础——java中String、StringBuffer、StringBuilder的区别

(转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的. private final char value[]; Strin

java中String、StringBuffer、StringBuilder的总结

看了很多关于java的string的相关知识,这里做一个较为全面的总结,内容转自不同地方的博客,鉴于出处较多,就不一一列举了. java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 1.可变与不可变 String类中使用字符数组保存字符串

Java中String,StringBuffer和StringBuilder的区别(转载)

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简 要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了

Java中String、StringBuffer、StringBuilder的比较与源 代码分析

Java中String.StringBuffer.StringBuilder的比较与源代码分析 众所周知String.StringBuffer.StringBuilder是java中常用的字符串类,下面我将从三个方面对他们三兄弟进行对比. 一.三者的数据组织及其功能实现 大家爱把String.StringBuffer.StringBuilder叫做三兄弟,经过分析代码发现说他俩三兄弟有点不太贴切,从组织结构上说,StringBuffer.StringBuilder更像是亲兄弟,这哥俩儿都有一个妈

JAVA中 String 、StringBuffer和StringBuilder 的区别

String 内容定义成 final char[],只能在属性和构造函数中赋值,其它地方不能改变 :String 覆盖实现了 equals . StringBuffer 内容定义成了 char[] ,但没实现 equals. String 和 StringBuffer 的区别是: 1.String 通过构造新的String 实现可变字符串,而 StringBuffer 通过改变内部的内容属性来实现可变字符串. 2.new String("ABC").equals("ABC&q

【JAVA中String、StringBuffer、StringBuilder类的使用】

一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: 1 public class StringDemo 2 { 3 public static void main(String args[]) 4 { 5 StringDemo1(); 6 7 } 8 public static void StringDemo1() 9 { 10 String str1="abcd"; 11

Java 中 String、StringBuffer、StringBuilder 类

一.String类 1.须知 本质:字符串的本质是一个字符的数组. String s3 = "abc" 和 String s4 = new String("abc")的区别: String s3 = "abc": 以字符数组的形式存在堆中的常量池中,在常量池分配地址. String s4 = new String("abc"): 首先在常量池出现,分配地址,然后再堆中开辟空间,并为此空间赋值,分配地址,此空间存的是在常量池中的

java中String、StringBuffer与StringBuilder

昨天遇到一道编程题关于字符串中字符内容的替换,题目如下: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Solution { public String replaceSpace(StringBuffer str) { //添加代码 } } 于是想通过此题对java中字符串的定义与处理方式有所了解. 一.String java中没有内置的字符串类型,在标准jav