String, StringBuffer, StringBuilder之间的区别

String与StringBuffer/StringBuilder之间的主要区别

1.String对象不可变, 如果修改会重新创建一个对象, 然后把值保存进去. StringBuffer/StringBuilder对象是可变的.

2.String性能远远低于StringBuffer/StringBuilder

3.StringBuilder速度稍快于StringBuffer, 但与此带来的缺陷是StringBuilder是线程不安全的, 而StringBuffer是线程安全的.

 

下面执行一段代码来测试一下三者的运行时间

 1 // 测试String StringBuffer StringBuilder
 2 public class Test {
 3     public static void main(String[] args) {
 4         testString();
 5         testStringBuffer();
 6         testStringBuilder();
 7     }
 8     
 9     // 2万次为37097毫秒
10     public static void testString() {
11         String testStr = "abcdefghijklmnopqrstuvwxyz";
12         long start = System.currentTimeMillis();
13         String str = "";
14         for (int i = 0; i < 20000; i++) {
15             str += testStr;
16         }
17         long end = System.currentTimeMillis();
18         System.out.println(end-start);
19     }
20     
21     // 20万次为55毫秒
22     public static void testStringBuffer() {
23         String testStr = "abcdefghijklmnopqrstuvwxyz";
24         long start = System.currentTimeMillis();
25         StringBuffer sb = new StringBuffer();
26         for (int i = 0; i < 200000; i++) {
27             sb.append(testStr);
28         }
29         long end = System.currentTimeMillis();
30         System.out.println(end-start);
31     }
32     
33     // 20万次为34毫秒
34     public static void testStringBuilder() {
35         String testStr = "abcdefghijklmnopqrstuvwxyz";
36         long start = System.currentTimeMillis();
37         StringBuilder sb = new StringBuilder();
38         for (int i = 0; i < 200000; i++) {
39             sb.append(testStr);
40         }
41         long end = System.currentTimeMillis();
42         System.out.println(end-start);
43     }
44 }

发现 String和StringBuffer/StringBuilder之间的执行速度差别巨大, 而StringBuilder稍快于StringBuffer.(为了使StringBuffer和StringBuilder之间差距明显一些, 我在这里循环了20万次)

 

使用建议

操作少量数据 用String

字符串经常改变的情况下, 使用StringBuffer/StringBuilder

操作大量数据  单线程->StringBuilder 多线程->StringBuffer(两者执行速度差异不大, 为了多线程安全问题, 建议使用StringBuffer)

 

 

 

 

转载于:https://www.cnblogs.com/lwn007/p/7677623.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php代码怎么修改成laravel,Laravel框架实现即点即改功能的方法分析

本文实例讲述了Laravel框架实现即点即改功能的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;有的时候我们不需要更改大量数据,只需要更改一个字段的时候,我们就用到了即点即改,以用户模块,修改用户名称为例,下图为我的展示模块当我们点击用户名时,会出现一个修改…

人工智能、网络空间对国家核安全的影响

来源&#xff1a;知远战略与防务研究所人工智能技术是一把双刃剑&#xff0c;其在网络空间和核领域的应用&#xff0c;一方面能够为网络安全和核安全提供技术保障&#xff1b;另一方面&#xff0c;人工智能技术也可能为对手所用&#xff0c;通过网络空间对核武器体系进行渗透进…

CF876 F 思维 枚举

给你n个数&#xff0c;问有几个区间满足&#xff0c;区间内或操作大于区间内的任意数。 首先可以知道&#xff0c;两数或操作的结果必定不会小于两者间的最大值&#xff0c;也就是说对于一个区间中&#xff0c;不合法的状态只有两值或相等。那么我们可以考虑枚举每个数&#xf…

java 设置头错误信息,错误:在node.js中发送标头后无法设置标头

我在node.js中写了这个简单的登录代码&#xff1a;var express require ("express");var badyparser require ("body-parser");var app express();app.use(express.static(__dirname "/static"));app.use(badyparser());var users {tom : &…

关注 | 5G 和 WiFi-6,谁是智能制造的主角?

来源&#xff1a;万物智能视界依据不同的情境和需求&#xff0c;结合不同技术的优点&#xff0c;让5G和WiFi-6在工业、物联网、自驾车等领域皆能蓬勃发展&#xff0c;协助产业更进一步朝向智慧化迈进。去年&#xff08;2019年&#xff09;12月&#xff0c;英国的航太设备&#…

[LeetCode] Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. 二叉树的最小深度。 使用递归求解&#xff1a; 如果根节点为空&#xff0c;返回0。 如果左节点为空&…

java中table属性,Table边框使用方法及属性大全

一、表格的常用属性基本属性有&#xff1a;width(宽度)、height(高度)、border(边框值)、cellspacing(表格的内宽&#xff0c;即表格与tr之间的间隔)、 cellpadding(表格内元素的间隔&#xff0c;即tr与tr之间的间隔)、bordercolorlight(表格的亮边框颜色)、 bordercolordark(表…

吴恩达推荐笔记:22张图总结深度学习全部知识

来源&#xff5c;Sophia知乎&#xff0c;https://zhuanlan.zhihu.com/p/152362317本文仅用于学术分享&#xff0c;如有侵权&#xff0c;联系后台作删文处理编译&#xff1a;极市平台最近在做笔记查阅内容&#xff0c;觉得这个总结太美观了&#xff0c;真是棒&#xff01;吴恩达…

matlab编程实现二进制树搜索,数据结构: 二进制搜索树(用C语言实现)

有关二叉树的基本知识&#xff0c;请参阅我的博客之一: 二叉树的链式存储说明:二进制排序树是具有以下属性的空树或二进制树:1. 如果左子树不为空&#xff0c;则左子树上所有节点的值均小于其根节点的值;2. 如果右子树不为空&#xff0c;则右子树上所有节点的值都大于其根节点的…

植物的意识,是我们的错觉吗?

来源&#xff1a;原理说到生物&#xff0c;你脑海中第一反应会浮现出什么&#xff1f;大象、狮子、蚂蚁……很多时候&#xff0c;我们可能会不由自主地忽略另一群重要的“地球邻居”。虽然植物占地球生物量的80%以上&#xff0c;但长久以来&#xff0c;它们一直会被忽略和低估。…

php $handle,laravel $kernel-handle 报错的解决办法_PHP开发框架教程

yii和zend框架的区别是什么&#xff1f;_PHP开发框架教程Yii框架和zend框架的区别&#xff1a;zend的功能强大&#xff0c;但基本百分之八十的功能你用不到&#xff1b;学习速度功能&#xff0c;效率方面&#xff0c;YII会略胜。Q&#xff1a;我的项目启动时报错laravel $kerne…

CodeForces 869E The Untended Antiquity 二维树状数组,随机hash

CodeForces 869E 题意&#xff1a; n*m 的格子&#xff0c;有三种操作&#xff0c; 1、在一个矩形周围加一层障碍。2、把一个矩形周围的障碍去掉。 3、询问两个格子是否可达。 题目保证不会有矩形障碍交叉&#xff0c;且去掉的矩形一定是在前面已给出的。 tags&#xff1a…

纪念机器翻译概念的诞生:重新认识瓦伦·韦弗先生

来源&#xff1a;AI科技评论作者&#xff1a;张家俊编辑&#xff1a;丛 末机器翻译旨在利用计算机实现自然语言之间的自动翻译&#xff0c;一直是自然语言处理与人工智能领域的重要研究方向&#xff0c;近年来更是取得了突破性进展&#xff0c;已成为大众较为熟知和常用的技术…

php 怎样清除浏览器痕迹,如何清除电脑使用痕迹?上网痕迹清理的方法介绍

当我们上网的时候&#xff0c;会使用电子信箱&#xff0c;会登录很多论坛类网站&#xff0c;这样就会留下账号&#xff1b;可能会访问一些网站&#xff0c;这样会留下上网信息&#xff1b;可能会登录一些电子商务网站&#xff0c;那账号和密码则会默认保存在系统之中&#xff0…

兰德报告《现代战争中的全域联合指挥控制--一种确定和开发人工智能应用的分析框架》...

本文来源&#xff1a;兵推天下本报告作者研究了美国空军应用人工智能&#xff08;或更广泛的自动化系统&#xff09;进行有计划全域联合指挥控制规划的机会并给出了相关建议。作者发现&#xff0c;要为未来多域战提供支持&#xff0c;必须协调以下三个范畴的内容:1&#xff09;…

实现内、外网同时访问

不少公司的网管试图解决双网卡问题&#xff0c;下面我就给大家详细的讲解一下双网卡同时使用的方法&#xff0c;这样即可保障内网的安全&#xff0c;又能解决电脑访问外网的问题&#xff0c;一举两得。希望大家喜欢。 首先你的机器需要有两块网卡&#xff0c;分别接到两台交换机…

java swing 多个线程,Swing与多线程

1)如果要在图形界面上显示经过数据查询或经过其他方式得来的数据&#xff0c;一般将这个过程放在一个线程中&#xff0c;由该线程进行单独运算&#xff0c;并随时更新图形界面。(2)Swing线程发生死锁的时候&#xff0c;如果是使用命令行的方式运行的该程序&#xff0c;可以使用…

日本面向未来的特定科技领域技术预见分析

作者&#xff1a;王达&#xff0c;中国科协创新战略研究院本文转载自微信公众号科学家&#xff0c;原载于《今日科苑》2020年第5期目前&#xff0c;全球面临的环境、人口变化、资源、粮食和能源安全等问题亟待解决&#xff0c;先进的测量技术与信息处理技术的深度融合可以刺激更…

Prototype模式

原型模式创建对象不调用原对象的构造函数&#xff0c;是直接copy原对象的浅克隆&#xff1a;对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深克隆&#xff1a;对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. …

oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)

授权方式2-简化模式(implicit grant type)简化模式(implicit grant type)不通过第三方应用程序的服务器&#xff0c;直接在浏览器中向认证服务器申请令牌&#xff0c;跳过了"授权码"这个步骤&#xff0c;因此得名。所有步骤在浏览器中完成&#xff0c;令牌对访问者是…