String和StringBuffer有什么区别啊?

发布网友

我来回答

2个回答

懂视网

 1 public class Test { 
 2 public static void main(String args[]) { 
 3  
 4  String str = "abc"; 
 5  StringBuffer sb = new StringBuffer("abc"); 
 6  Runtime runtime = Runtime.getRuntime(); 
 7  long start = System.currentTimeMillis(); 
 8  long startFreememory = runtime.freeMemory(); 
 9  for (int i = 0; i < 10000; i++) { 
10  str += i; 
11  //测试StringBuffer时候把注释打开 
12  //sb.append(i); 
13  } 
14  long endFreememory = runtime.freeMemory(); 
15  long end = System.currentTimeMillis(); 
16  System.out.println("操作耗时:" + (end - start) + "ms," + "内存消耗:" 
17   + (startFreememory - endFreememory)/1024 + "KB"); 
18 } 
19 } 
技术图片

 

 

测试结果:

使用String做10000次向一字符串后添加字符串

操作耗时:1872ms,内存消耗:1301KB

 

使用StringBuffer做10000次向一字符串后添加字符串

操作耗时:15ms,内存消耗:162KB

差别显著!


Dao持久层定义sql语句拼接参数之String和StringBuffer区别

标签:bsp   使用   lte   build   list   blog   复制   的区别   template   

热心网友

StringBuffer是一个具有对象引用传递特点的字符串对象。StringBuffer对象可以调用其方法动态的进行增加、插入、修改和删除操作,且不用像数组那样事先指定大小,从而实现多次插入字符,一次整体取出的效果,因而操作字符串非常灵活方便。一旦通过StringBuffer生成最终想要的字符串,就可调用它的toString方法将其转换为一个String对象 追问: StringBuffer调用它的toString方法指向一个地址,最后还是变成了一个String对象,为什么在不直接用String呢?如:pstmt = con.prepareStatement(sql.toString());和String sql1 = "select * from ...";pstmt = con.prepareStatement(sql1); 回答: String的操作都是改变赋值地址而不是改变值操作 String 类和 StringBuffer 类的比较:相同: 1: 都是用来处理字符串的 2:都提供了 length() , toString() ,charAt() , substring() 方法 ,用法一样 3:对于String 类和 StringBuffer 类,字符在字符串中的索引位置都从 0 开始。 4:两个类的 substring( int beginIndex, int endIndex)方法都是用来截取字符串,且范围都是从beginIndex 开始, 到 endIndex--1 为止。 不同: 1: String 类 是不可变类 , StringBuffer 类 是可变类 String 类提供的 比如 substring ,replace 等方法 都不会更改字符串内容,实际上是创建一个方法所浮于特性的新字符串。 返回一个改变后内容的新字符串。 StringBuffer 的 appeng(),等方法都会改变字符缓冲区中的字符串内容。 2:String 类 覆盖了Object类的 equals()方法 StringBuffer类没有覆盖 3: 都覆盖了Object()类的 toString() 方法,实现不一样 String类的toString() 方法返回当前String实例本身的引用。 StringBuffer类的toString方法返回一个以当前StringBuffer的缓冲区中的所有字符串为内容的新的 String对象的引用。 4: String 对象可以用 操作符 "+ " 进行连接 StringBuffer 不能 追问: 我懂了String sql =“hello word”;相当于String创建以后就有了空的字符,然后将字符串“hello word”赋值给它,得到新的字符串。StringBuffer类的toString方法类似于把创建后的空字符串改变成新的字符串,没有重新赋值。可以这样理解吗? 回答: 简单点说用StringBuffer主要是为了对字符进行增加、插入、修改和删除操作,而String 是操作完成后用来存储字符的。就好像说一块固态(String)的金砖,你想改变的的形状就的先融化成液态(StringBuffer),等形状确定以后再变成固态(String)。这个比方并不是很恰当,不过应该更好一点理解。 补充: 你的理解只能说没错,却也不完全正确。 追问: 感谢! 回答: 不客气,互相交流一下,我现在都很少用Java了,改行学C++

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com