Java核心技术之String,stringBuffer,stringBuilder

news/2024/7/8 8:29:11

这里写图片描述

定义

String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量

String是“字符串常量”,也就是不可改变的对象。如果用String来处理字符串的变化时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多低,所以String主要用来处理字符串常量。

StringBuffer与StringBuilder是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度和效率就快。

样例分析

先来个测试样例:

String string = "";
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
    string = string + i;
}
long end = System.currentTimeMillis();
System.out.println("string time:"+(end-start));

StringBuffer stringBuffer = new StringBuffer();
long start_stringBuffer = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
    stringBuffer = stringBuffer.append(i);
}
long end_stringBuffer = System.currentTimeMillis();
System.out.println("stringBuffer time:"+(end_stringBuffer-start_stringBuffer));

StringBuilder stringBuilder = new StringBuilder();
long start_stringBuilder = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
    stringBuilder = stringBuilder.append(i);
}
long end_stringBuilder = System.currentTimeMillis();
System.out.println("stringBuilder time:"+(end_stringBuilder-start_stringBuilder));

运行结果:

string time:16820
stringBuffer time:6
stringBuilder time:4

运行结果清楚的告诉我们,处理字符串变化时的速度和效率是:

StringBuilder > StringBuffer  > String 

StringBuilder与 StringBuffer

StringBuilder:线程非安全的
StringBuffer:线程安全的

当我们的字符串被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。
当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

总结

1.如果要操作少量的数据用 String
2.单线程字符串操作大量数据 = StringBuilder
3.多线程字符串操作大量数据 = StringBuffer


http://www.niftyadmin.cn/n/4545742.html

相关文章

linux 非阻塞 connect函数

开发测试环境&#xff1a;虚拟机CentOS&#xff0c;windows网络调试助手 非阻塞模式有3种用途 1.三次握手同时做其他的处理。connect要花一个往返时间完成&#xff0c;从几毫秒的局域网到几百毫秒或几秒的广域网。这段时间可能有一些其他的处理要执行&#xff0c…

设计模式之空对象模式--- Pattern Null Object

模式的定义 空对象模式(Null Object Pattern)定义如下&#xff1a; Provide an object as a surrogate for the lack of an object of a given type. The Null Object provides intelligent do nothing behavior, hiding the details from its collaborators. 空对象模式提供…

(MFC)CPropertySheet的生成

在进行书本上例子代码的编写中发现&#xff0c;在属性对话框的类生成中没有发现CPropertySheet这个基类&#xff0c;后来经仔细阅读才知道&#xff0c;这是一个MFC类&#xff0c;在类生成器中选择MFC类能自动生成&#xff0c;不能通过属性对话框的类生成器来指定基类为CPropert…

如果我是面试官,我要出什么面试题(持续更新)

最近在看书&#xff0c;觉得自己也是可以出一些非常好的面试题&#xff0c;真的是非常的好&#xff0c;可以测试一个人的真实水平。哈哈&#xff0c;来吧&#xff0c;就积累几道吧&#xff0c;以后做面试官直接来用。 开发的基础 什么样的子程序是高质量的&#xff1f;&#…

如果我是面试官,我要出什么面试题(持续更新)--参考答案

开发的基础 什么样的子程序是高质量的&#xff1f;&#xff08;什么样的方法或函数是高质量的&#xff09; 参考答案&#xff1a; 这是《代码大全2》的第7章高质量的子程序讲解的内容&#xff0c;我大概总结了一下&#xff1a; (1)方法的名称要清晰描述方法的功能&#xff…

java核心技术之反转排序算法

基本思想 反转排序&#xff0c;就是以相反的顺序把原来的数组的内容重新排序。比较简单&#xff0c;也是经常用到的。 算法示例 反转排序是对数组两边的元素进行替换&#xff0c;所以只需要循环数组长度的一半。如数组为【1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…

【图的最短路径】迪杰斯特拉算法求图的最短路径

要求&#xff1a;求带权有向图中某一结点到其他结点的最短路径。 用迪杰斯特拉算法求解&#xff0c;迪杰斯特拉算法书上的描述如下&#xff1a;对于图G&#xff08;V&#xff0c;{E}&#xff09;&#xff0c;将图中的顶点归为两组&#xff1a;第一组S&#xff1a;已求出的最短路…

java核心技术之直接选择排序算法

基本思想 直接选择排序是选择排序的一种&#xff0c;其排序速度比冒泡排序要快一些&#xff0c;是常用的排序算法之一。 其基本思想是的将指定排序位置与其他数组元素分别比较&#xff0c;如果满足条件就交换元素值。注意&#xff0c;这里与冒泡排序的区别是不是交换相邻元素…