String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。

在java中有3个类来负责字符的操作。

1.Character 是进行单个字符操作的,

2.String 对一串字符进行操作。不可变类。

3.StringBuffer 也是对一串字符进行操作,但是可变类。

String:

是对象不是原始类型.

为不可变对象,一旦被创建,就不能修改它的值.

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

String 是final类,即不能被继承.

StringBuffer:

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象

它只能通过构造函数来建立,

StringBuffer sb = new StringBuffer();

note:不能通过付值符号对他进行付值.

sb = "welcome to here!";//error

对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer

中付值的时候可以通过它的append方法.

sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");

str += "here";

的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后

再将StringBuffer toSting();

这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.

这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.

看看以下代码:

将26个英文字母重复加了5000次,

String tempstr ="abcdefghijklmnopqrstuvwxyz";

inttimes =5000;

longlstart1 = System.currentTimeMillis();

String str ="";

for(inti =0; i

str += tempstr;

}

longlend1 = System.currentTimeMillis();

longtime = (lend1 - lstart1);

System.out.println(time);

可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。

也就是46秒。

我们再看看以下代码

String tempstr ="abcdefghijklmnopqrstuvwxyz";

inttimes =5000;

longlstart2 = System.currentTimeMillis();

StringBuffer sb =newStringBuffer();

for(inti =0; i

sb.append(tempstr);

}

longlend2 = System.currentTimeMillis();

longtime2 = (lend2 - lstart2);

System.out.println(time2);

得到的结果为 16 有时还是 0

所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试。

根据上面所说:

str += "here";

的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后

再将StringBuffer toSting();

所以str += "here";可以等同于

StringBuffer sb = new StringBuffer(str);

sb.append("here");

str = sb.toString();

所以上面直接利用"+"来连接String的代码可以基本等同于以下代码

String tempstr ="abcdefghijklmnopqrstuvwxyz";

inttimes =5000;

longlstart2 = System.currentTimeMillis();

String str ="";

for(inti =0; i

StringBuffer sb =newStringBuffer(str);

sb.append(tempstr);

str = sb.toString();

}

longlend2 = System.currentTimeMillis();

longtime2 = (lend2 - lstart2);

System.out.println(time2);

平均执行时间为46922左右,也就是46秒。

总结: 如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高

Java中stringbutter_java中string与ButterString的区别相关推荐

  1. java string 连续字符_Java中字符串中连续相同字符去重方法

    导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...

  2. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  3. Java 中的字符串(String)与C# 中字符串(string)的异同

    1. C# 中比较两个字符串字面量是否相等,可以使用 "=="比较运算符,是因为string 类型重写(override)了"==" 和 "!=&qu ...

  4. java中如何将string 转化成long(亲测)

    转自:https://www.cnblogs.com/feifeicui/p/8390604.html 1.java中如何将string 转化成long long l = Long.parseLong ...

  5. JAVA中int、String的类型转换(亲测)

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  6. JAVA中int、String的类型转换

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  7. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  8. java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园

    今天在superWaba上看到Convert.toDouble(String str),由于底层问题比较大的数就出错,现在自己写了一个 程序中info()是我加的打印,可以去掉 java中 Conve ...

  9. java 使用string_java中string怎么使用

    展开全部 以下是关于string的七种用法,注意哦,记得要时常去查看java的API文档,那个里面也有很详细32313133353236313431303231363533e78988e69d8331 ...

最新文章

  1. 报错解决:ERROR: While executing gem ... (Gem::CommandLineError)
  2. 对约束条件优化问题的理解
  3. 【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
  4. python爬虫赚钱的经历-聊一聊,这些年我用Python爬虫挣钱的那些事
  5. Spring AOP中pointcut expression表达式解析
  6. Python机器学习及分析工具:Scipy篇
  7. Cewolf使用小结
  8. 牛客多校4 - Harder Gcd Problem(构造+贪心)
  9. 序列化框架MJExtension详解 + iOS ORM框架
  10. 剑三游戏总是显示服务器繁忙,剑网3怀旧服:服务器终究低估了老玩家的热情...
  11. 运行SQL文件时报Lost connection to MySQL server during query
  12. 5个Linux 服务器发行版你值得拥有
  13. CS安装卸载测试总结
  14. 数据结构算法设计题汇总
  15. UG编程逆向工程如何做,一起来学习
  16. 2022-2028年中国SPA水疗行业市场深度分析及投资前景展望报告
  17. 常用复原reast.css
  18. N的阶乘递归与非递归
  19. el-checkbox点击没反应
  20. 如何让win XP实现自动登陆

热门文章

  1. 34 年了,“杀”不死的 Perl!
  2. 火山引擎进军云市场,计划未来三年服务十万客户
  3. 震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...
  4. python dll注入 网络_python – 检测反射型DLL注入
  5. python分片上传_python上传文件到oss
  6. java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...
  7. Cannot read property ‘forceUpdate‘ of undefined
  8. yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
  9. Springboot/Cloud集成Sentinel进阶实战
  10. java.lang.ClassNotFoundException: org.apache.log4j.Logger