- 浏览: 99153 次
- 性别:
- 来自: 无锡
文章分类
最新评论
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
2.String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量
从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:
String str = “This is only a” + “ simple” + “test”;
其实就是:
String str = “This is only a simple test”;
所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
String str2 = “This is only a”;
String str3 = “ simple”;
String str4 = “ test”;
String str1 = str2 +str3 + str4;
这时候JVM会规规矩矩的按照原来的方式去做。
4.StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
2.String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量
从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
String s = "abcd"; s = s+1; System.out.print(s);// result : abcd1
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
String str = “This is only a” + “ simple” + “ test”; StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:
String str = “This is only a” + “ simple” + “test”;
其实就是:
String str = “This is only a simple test”;
所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
String str2 = “This is only a”;
String str3 = “ simple”;
String str4 = “ test”;
String str1 = str2 +str3 + str4;
这时候JVM会规规矩矩的按照原来的方式去做。
4.StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
发表评论
-
java 堆栈
2018-07-24 22:59 438java的内存分为两类 : 堆 ... -
初始化ArrayList, 默认长度10
2018-07-10 17:54 1917// 在初始化ArrayList的时候没有指定初始化长度的话 ... -
Java判断Long类型相等问题
2018-03-13 15:05 2377// Long类型判断相等时,比如Long a = 10L ... -
循环往list中add对象却总是add的是一个对象
2017-11-11 16:53 19491. 在new 一个对象的时候,对象的ID是唯一确定的;将对象 ... -
变量定义的初始化顺序
2017-11-04 18:05 480//#java编程思想P94 //在类的内部, 定义变量 ... -
JavaBean解释
2017-09-07 15:05 503Spring如何知道setter方法?如何将值注入进去的呢?其 ... -
log4j2配置
2017-08-31 18:22 438//lib log4j-core-xx.jar lo ... -
java为什么不需要sizeof()
2017-07-21 13:51 392在C和C++中,sizeof()操作符可以告诉你为数据项分配的 ... -
回车换行 \r\n
2017-07-06 16:15 417\r就是"回到行首",\n就是" ... -
基本类型直接存储“值”,置于堆栈中。 new将对象存储在“堆”中。
2017-07-04 19:07 673基本类型置于堆栈中,更加高效。 其他java对象存储在堆中 -
Java中如何遍历Map对象的4种方法
2017-05-26 16:42 450http://blog.csdn.net/tjcyjd/art ... -
初始化List泛型时,list为null还是为空?应该是空(size()=0)
2017-04-13 17:29 694List<Object> list = new A ... -
String的拼接
2017-03-21 11:01 461当使用+拼接字符串时,会生成新的String对象,而不是向原有 ... -
判断两个参数的值是否相同
2017-02-06 17:00 544private boolean isValueSame(Obj ... -
检查数组中是否包含特定值(Check if an array contains a certain value)
2017-01-10 10:19 360String[] stringArray = { " ... -
JSP中java代码引用map类
2016-11-04 12:14 510<% java.util.Map m = new ja ... -
批量命名变量名(无法确定字符串数组长度)
2016-11-04 12:00 466String a = "a b c"; ... -
null和""以及==与equals的区别
2016-08-11 17:59 403String str1 = null; str引用为空 ... -
java生成当前日期格式设置
2016-08-03 14:04 519package com.grace.test; ... -
Eclipse/Myeclipse生成serialVersionUID方法
2016-08-03 13:54 593serialVersionUID作用: 序列化时为了保持 ...
相关推荐
在Java编程语言中,`CharSequence`是一个接口,它是字符序列的抽象基类,包括`String`、`StringBuffer`和`StringBuilder`等类。理解这些类的特点和用途是优化程序性能的关键。以下是对这些概念的详细解释: 1. `...
Java中的字符串处理是编程中常见的任务,涉及到三个关键类:String、StringBuffer和StringBuilder。它们在功能上相似,但有着重要的区别,主要体现在字符串的可变性、线程安全性和性能方面。 1. 可变性 - String类...
《Java中的StringBuffer与StringBuilder类详解》 在Java编程中,当我们需要对字符串进行多次修改时,StringBuffer和StringBuilder类成为首选。这两个类提供了一种高效且灵活的方式来处理字符串,与不可变的String类...
在Java编程语言中,`String`和`StringBuffer`(在Java 5之后被`StringBuilder`取代,但在多线程环境中仍然使用`StringBuffer`)是处理文本字符串的两个核心类,它们各自有着不同的特性和用途。理解它们的区别对于...
### String总概况及其特性并与StringBuffer的区别详解 在Java编程语言中,`String`与`StringBuffer`是非常重要的数据类型,被广泛应用于处理文本数据。本文将深入探讨这两个类的基本特性以及它们之间的区别。 ####...
其中,StringBuilder是Java 5引入的新类,它与StringBuffer功能类似,但不保证线程安全。这意味着在单线程环境下,StringBuilder通常比StringBuffer更快,因为它省去了同步开销。 StringBuffer是在多线程环境下使用...
Java中的`String`、`StringBuilder`和`StringBuffer`都是用来处理字符串的类,它们各自有不同的特性和适用场景。在理解它们之间的区别之前,我们首先要知道它们的共同点。 **共同点:** 1. **都是字符串类**:这三...
### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...
Java String 和StringBuffer 的详解及区别 Java String 和StringBuffer 是 Java 语言中两个基本的字符串类,它们都是用于存储和操作字符串的,但是它们之间有着很大的区别。 String 类 String 类表示内容不可改变...
4. **StringBuilder与StringBuffer** - `StringBuilder`和`StringBuffer`是可变的,它们提供了在已有字符串基础上添加、删除、替换字符的方法,如`append()`、`insert()`、`delete()`等,而不会每次操作都创建新...
本篇文章将深入解析`StringBuilder`的使用方法、内部机制以及与`StringBuffer`的区别。 `StringBuilder`是Java中的一个类,它位于`java.lang`包下,主要负责动态构建和修改字符串。与`String`不同,`String`对象是...
- `StringBuilder`与`StringBuffer`非常相似,但在非多线程环境中通常更快,因为它不保证线程安全。 - 当字符串操作仅在一个线程中发生时,推荐使用`StringBuilder`以提高性能。 - **构建过程**: 1. 创建一个空...
### JavaSE之StringBuilder类与String类 #### 一、String类概述 在Java语言中,`String`类是非常重要的一个类,它代表了不可变的字符序列,即一旦创建了一个`String`对象,其内容就不能被修改。由于`String`类的不...
答案:String、StringBuffer、StringBuilder 最大的不同是 String 不可变,后者可变。StringBuffer 是线程安全的,StringBuilder 线程不安全但是速度较快。StringBuffer 和 StringBuilder 都是可变的,但是 ...
本篇文章将深入探讨`StringBuffer`的原理、用法及其与`StringBuilder`的区别。 1. **基本概念** `StringBuffer`是Java中处理字符串的类,它继承自`AbstractStringBuilder`并实现了`Serializable`和`CharSequence`...
### Java中的StringBuilder详解 在Java编程语言中,`StringBuilder`是一个非常重要的类,它提供了一种高效地构建和操作字符串的方式。与`String`不同,`StringBuilder`对象是可变的,这意味着可以在不创建新对象的...
Java编程语言在面试中常常涉及一系列关键概念,这些概念包括方法的重载(overload)与覆盖(override)、接口与抽象类的区别、String、StringBuffer与StringBuilder的特性比较、ArrayList、LinkedList与Vector的差异、...
### Java中的String类型详解 在Java编程语言中,`String` 类型是非常基础且重要的数据类型之一,它代表了一系列字符的有序集合。本篇文章将基于一个具体的示例代码,深入探讨`String`对象的创建、比较以及不同字符...
StringBuffer与String类的主要区别在于其内部实现机制和线程安全性。String对象在进行任何修改时,都会创建一个新的对象,这在内存管理上并不理想,特别是在大量操作时。而StringBuffer则通过维护一个可变的字符序列...