stringbuilder

Java字符串拼接之String、StringBuffer和StringBuilder的性能

岁酱吖の 提交于 2019-12-05 16:44:39
Java字符串拼接之String、StringBuffer和StringBuilder的性能 作者:谢景,撰写:2019-4-16 在c#中,字符串拼接是利用+号运算符重载实现的,但是在Java中虽然+号运算符也能实现字符串拼接,但是性能差。 下面介绍一下关于字符的相关的类。 String 类对象不可变,一旦修改 String的值就是隐形的重建了一个新的对象,释 放了原 String对象 例如:String str=str+"a"; 相当于 先声明一个新的String:String str1=new String(str+"a"); 然后再将新的String赋值给旧的str:str=str1; StringBuffer和StringBuilder类是可以通过append()、insert()、reverse()…等方法 来修改值。创建的对象是可变 StringBuffer:线程安全的; StringBuilder:线程非安全的 字符串连接 String 的 + 比 StringBuffer(StringBuilder) 的 Append() 性能差了很多 三者在执行速度方面的比较:StringBuilder > StringBuffer > String 下面通过代码实践来验证一下上面的结论: public static void ddd(){ //----------------

字符串连接你用+还是用StringBuilder

我是研究僧i 提交于 2019-12-05 16:42:28
前言 据我所知字符串确实已经成为 Java 开发人员最常用的类了,而且是大量使用。我们都知道,String 其实是封装了字符,所以俩字符串连接就是将字符串对象里面的字符连起来。很多人习惯使用 + 来连接字符串,也有人会用 StringBuilder 的 append 方法。 “+”编译后 看看如果我们在程序中直接使用 + 来连接字符串的情况,用下面一个简单的例子来说明,进行两个字符串连接操作,即 s3 = s1 + s2 。 public class TestString { public static void main (String[] args) { String s1 = "www" ; String s2 = "ccc" ; String s3 = s1 + s2; } } 接着 javap -c TestString.class 看一下编译后的情况,可以看到编译器其实是对 + 进行了转换的,转成了 StringBuilder 对象来操作了,首先使用 s1 创建 StringBuilder 对象,然后用 append 方法连接 s2,最后调用 toString 方法完成。 public class com.seaboat. string .TestString { public com.seaboat. string .TestString(); Code: 0 :

String/StringBuffer/Stringbuilder字符串拼接使用

半腔热情 提交于 2019-12-05 16:42:08
认识String、StringBuffer和StringBuilder String:是常亮,其本身不可变,若拼接的话,每次都是新创建对象,消耗很大; StringBuffer和StringBuilder 是可变的,都适合用与字符串拼接但StringBuilder比StringBuffer速度快很多,而且StringBuilder是单线程,不是线程安全的,一般使用StringBuilder; 测试代码: public class Test { public static void main(String[] args) { //String类型拼接 String str = “爱我还是爱他”; // String str1= str.concat(“我已经看不到希望了”); str = str+"?"; System.out.print(str ); //StringBuffer类型拼接 StringBuffer strb = new StringBuffer("你不爱我了"); strb.append("你走吧"); System.out.print("\n"+"StringBufer类型拼接:"+strb.toString()); //insert 前一个参数是插入的下标,后一个参数是插入的数据 strb.insert(0,"唉,"); System.out.print

Java字符串拼接效率和String,StringBuilder,StringBuffer三者的区别

♀尐吖头ヾ 提交于 2019-12-05 16:41:10
Java字符串拼接效率和String,StringBuilder,StringBuffer三者的区别 拼接字符串,用String, StringBuffer,StringBuilder。StringBuilder是jdk1.5中新增的。 测试类如下: public class TestStringConcat { public static void main (String[] args) { long n = 30000 ; System. out .println( "Starting... " ); //String+=拼接 long start1 = System.currentTimeMillis(); String s1 = new String( "hello" ); for ( long i = 0 ; i < n; i++) { s1+= "拼接字符串的时间" ; } long end1 = System.currentTimeMillis(); long time1 = end1 -start1; System. out .println( "用String+=拼接字符串的时间" +time1); //String=String+拼接 long start2 = System.currentTimeMillis(); String s2 = new

String与StringBuilder连接字符串

纵饮孤独 提交于 2019-12-05 16:40:44
String对象是不可变的,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。 不可变性会带来一定的效率问题。为String对象重载的“+”操作符就是一个例子(用于String的“+”与“+=”是Java中仅有的两个重载过的操作符,而Java并不允许程序员重载任何操作符)。操作符“+”可以用来连接String: public class Concatenation{ public static void main(String[] args){ String mango = "mango" ; String s = "abc"+ mango + "def" +47 ; System.out.println(s) ; } } 在这个例子中,编译器自动引入了java.lang.StringBuilder类,因为它更高效。编译器创建了一个StringBuilder对象,用以构造最终的String,并未每个字符串调用一次StringBuilder的append()方法,总计四次。最后调用toString()生成结果。 public class WhitherStringBuilder { public String implicit(String[] fields){

字符串拼接之StringBuilder和string的区别

有些话、适合烂在心里 提交于 2019-12-05 16:40:05
字符串是我们使用最多的数据类型,有时一些操作需要做大量的字符串拼接,下面分析一下做字符串拼接时StringBuilder和string的区别。 1、string :首先,string是引用类型,存放在堆内存中,有“不可变性”的特性(驻留池机制),但是在做字符串拼接时,每次都会创建一个新对象,也就是每次都要去申请内存空间,因为做大量字符串拼接时性能很差,只适合做少量的字符串拼接。 =》简单演示:才10万数据,哎,惨不忍睹..... 2、StringBuilder :微软在string的基础上对StringBuilder做了优化,不会每次都去申请内存,而是一下子就申请一大块内存,做大量字符串拼接性能非常高。 =》简单演示:100万数据,一秒不到 来源: CSDN 作者: chwenbin 链接: https://blog.csdn.net/chwenbin/article/details/79177384

[JAVA]浅谈String, StringBuilder字符串拼接速度

走远了吗. 提交于 2019-12-05 16:39:52
一般认为,字符串拼接速度, StringBuilder > StringBuffer > String 但真的任何时候都需要用“append”代替“+”?显然不是。 String ≈ StringBuilder 如果只是定义 String 时拼接 变量 ,此时两者速度相差不大,可以直接使用“+”。 考虑以下语句: String str = "abc" ; String str1 = str + "def" ; String str2 = new StringBuilder().append(str).append( "def" ).toString(); 生成str1的速度和生成str2的速度相当。 原因 通过反编译可以发现,做“+”操作时,编译器实际上也定义了StringBuilder并调用append方法进行字符串拼接,因此这种情况下,两者的速度相当。(显式调用 StringBuilder 可以减少一次append调用) String < StringBuilder 虽然编译器会帮我们定义 StringBuilder ,但它没有这么聪明。 考虑以下语句: String str = "" ; for ( int i = 0 ; i < 1000 ; i++) { str += "abcde" ; } StringBuilder stringBuilder = new

Java: Remove String from StringBuilder [duplicate]

孤人 提交于 2019-12-05 15:17:29
问题 This question already has answers here : How to do the opposite of StringBuilder append in Java? (4 answers) Closed 5 years ago . I want to remove String from StringBuilder Example String aaa = "sample"; String bbb = "sample2"; String ccc = "sample3"; In another part StringBuilder ddd = new StringBuilder(); ddd.append(aaa); ddd.append(bbb); ddd.append(ccc); I want to check if StringBuilder ddd contains String aaa and remove it if (ddd.toString().contains(aaa)) { //Remove String aaa from

实现js版StringBuilder

╄→尐↘猪︶ㄣ 提交于 2019-12-05 11:06:32
.net中StringBuilder的好处不多说了,下面是js版的StringBuilder 1 var StringBuilder = (function () { 2 3 function StringBuilder() { 4 5 this._stringArr = []; 6 7 }; 8 9 StringBuilder.prototype.append = function (str) { 10 11 this._stringArr.push(str); 12 13 }; 14 15 StringBuilder.prototype.appendFormat = function (str) { 16 17 for (var i = 1, len = arguments.length; i < len; i++) { 18 19 var reg = new RegExp("\\{" + (i - 1) + "\\}", "g"); 20 21 str = str.replace(reg, arguments[i]); 22 23 } 24 25 this._stringArr.push(str); 26 27 }; 28 29 StringBuilder.prototype.toString = function () { 30 31 return this.

How to check null on StringBuilder?

倖福魔咒の 提交于 2019-12-05 10:47:51
问题 I want to check for null or empty specifically in my code. Does empty and null are same for StringBuilder in Java? For example: StringBuilder state = new StringBuilder(); StringBuilder err= new StringBuilder(); success = executeCommand(cmd, state, err); /* here executeCommand() returns empty or null in state, I cant make changes in <br/> executeCommand() so can I check it in my code somehow for state, if its null or empty? */<br/> if (state == null) { //do blabla1 } if (state.tostring()