String 、 StringBuffer、StringBuilder三者的区别

1、String类表示内容不可修改的字符串,StringBuffer(线程安全)和StringBuilder(线程不安全)类都表示内容可以被修改的字符串。

2、执行速度:StringBuilder > StringBuffer > String

String执行速度最慢原因:

  String的底层代码为一个用final修饰的char数组,这意味着定义一个String变量后,该变量的内容是不能够改变的。

  也就是说,你定义一个String变量后,不断的改变其内容,表面上看起来是改变了内容,因为每次输出的内容的确是改变了。但是,实际上是在不断地创建了新的String对象,而变量不断地指向新的String对象,所以看起来是改变了String对象的内容。

例如:

1 String s= "string1";
2 s = s+"strign2";

  这两行代码执行后,原始的String对象中的内容没有改变。s原先指向内容是"string1"的String对象,执行了第二句后,这时s不再指向原来的那个对象,而指向了另一个内容是"string1 string2"的对象,原来的那个对象还存在内存中,只是s不在指向它了。所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

 1      String string = new String();
 2
 3         StringBuffer sBuffer = new StringBuffer();
 4         //开始时间
 5         long startTime;
 6         //结束时间
 7         long endTime;
 8
 9         startTime = System.currentTimeMillis();
10
11         for (int i=0;i<10000;i++) {
12             string += i;
13         }
14         endTime = System.currentTimeMillis();
15         System.out.println("String执行时间:"+(endTime-startTime));
16
17         startTime = System.currentTimeMillis();
18
19         for (int i=0;i<10000;i++) {
20             sBuffer.append(i);
21         }
22         endTime = System.currentTimeMillis();
23         System.out.println("StringBuffer执行时间:"+(endTime-startTime));

执行结果:

1 String执行时间:329
2 StringBuffer执行时间:2

StringBuffer和StringBuilder

  StringBuilder是线程不安全的,所以运行效率高。如果一个字符串是在方法里定义,这种情况下只可能有一个线程访问,不存在不安全的因素,所以可以用StringBuilder。如果要在类里定义成员变量,并且这个类的实例对象会在多线程环境下使用,最好使用StringBuffer。

原文地址:https://www.cnblogs.com/xiaocaiyu/p/10812541.html

时间: 2024-09-29 19:24:38

String 、 StringBuffer、StringBuilder三者的区别的相关文章

关于Java基础知识 String StringBuffer StringBuilder三者的区别

Java基础中String StringBuffer StringBuilder 以下介绍 相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder 不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用 StringBuffer:线程安全(

String StringBuffer StringBuilder 之间的区别

StringBuffer与StringBuilder的区别: StringBuffer是jdk1.0版本出来的,线程安全,效率低 StringBuilder是jdk1.5版本出来的,线程不安全,效率高 String 与StringBuffer,StringBuilder 啷两个之间的区别: String是一个不可变的字符序列 StringBuffer,StringBuilder 是可变的字符序列

String StringBuffer StringBuilder之间的区别

String:字符串常量 StringBuffer:字符串变量 StringBuilder:字符串变量 对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码: 1 String s = "abcd";2 s = s + 1;3 System.out.print(s);  //abcd1 我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就

String ,Stringbuffer,Stringbuilder有什么区别

一:string是不可变的.stringbuffer是拼接字符串线程安全的.stringbuilder线程不安全 二:stringbuffer和stringbuilder底层是char或byte(jdk9)数组,构建初始长度是16. 三:jvm会将所有的字符串缓存起来.当调用"".intern()方法就会从缓存中查,有就返回实例,没有就建缓存.jdk6是这样的.但是不推荐使用,因为他存在perngon,永久代,fullGc才可以清理.后续的版本放在了堆中,jdk8放在了元数据区. 四:

String/StringBuffer/StringBuilder基础

String类:特点: 1)字符串字面值"hello"可以看做一个字符串对象 2)字符串是常量,一旦被赋值,就不能被改变. 构造: public String() public String(byte[] bytes) public String(byte[] bytes,int index,int length):表示从该字节数组的offset索引处开始获取length个字节数结合成字符串 public String(char[] value) public String(char[

转:String StringBuffer StringBuilder区别

转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了.嘿嘿.... 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却不是普通的类哦!!! [镜头1] String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,

Java杂谈之StringBuffer----兼带String,StringBuffer,StringBuilder的区别

在Java中,用到最多的当属String类型的数据了 而这一点就要涉及String , StringBuffer , StringBuilder这三大类 下面主要来比较一下String和StringBuffer的区别,因为StringBuffer和StringBuilder 太相似,所以就不拿来比较了. 提及一下,StringBuffer和StringBuilder的区别 从安全性来说,StringBuffer更安全,StringBuffer主打线程安全 从执行效率来说,StringBuilde

String, StringBuffer, StringBuilder比较

1.见API: String是不可变的字符序列: StringBuffer是线程安全的,可变的字符序列: StringBuilder是可变的字符序列: StringBuffer与String的区别是StringBuffer是可变的(StringBuffer看做可变的String),StringBuffer中含有的字符序列和自身长度可随着方法调用而改变:StringBuffer在多线程环境中是安全的,必要的方法都是同步的,因而在某一特定实例上的所有方法就像被依次执行一样,与所有方法依次执行的结果一

Java学习笔记--String StringBuffer StringBuilder

String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String str0 = "最正常的创建方法"; System.out.println(str0); char[] c1 = new char[3]; c1[0] = 'c'; c1[1]

String StringBuffer StringBuilder (转)

转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却不是普通的类哦!!! [镜头1] String对象的创建        1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world"); 问题是参数"Hello world"是什么东西,