Java基础 (3) - String/StringBuilder/Buffer StringFor

区别
1.可变与不可变
String —> private final char value[]; final 不可变的
StringBuilder/Buffer —> char value[] 可变的
String设计成不可变原因 -> 多个指引指向同一个内存空间,如任意指引修改,值将改变,其它引用也将改变。

2.是否多线程安全
String —> 安全 (不可变对象)
StringBuilder —> 不安全
StringBuffer —> 安全

3.性能
1.StringBuilder > StringFormat StringFormat内部也是StringBuilder AppendFormat实现的。(当数据量小的时候 性能差距不是很明显)
2.StringBuilder大概比Buffer快15% 。
3.“A” + “b” 系统编译的时候自动转换成 new StringBuilder.append(“a”).append(“b”);

4.使用上
StringBuilder 默认情况是16个字节。当内容超过指定大小,StringBuilder会扩容 (2*原大小+2)。因此根据业务需求指定合适的大小很重要(避免多次 复制成本和申请内存空间 ),一般情况下字符占2个字节 中文占2~4个字节。

原文地址:https://blog.51cto.com/4397014/2436219

时间: 2024-08-30 01:30:48

Java基础 (3) - String/StringBuilder/Buffer StringFor的相关文章

Java基础之String,StringBuilder,StringBuffer

在创建字符串的时候总是习惯性的使用String str = "...";,str = str+"abcd";也有听说过StringBuffer,StringBuilder,但是压根就没想过要去了解过. String乍一看创建的很方便,其实在字符串比较多的时候或者说创建了多个字符串的时候就会出现很大的问题,因为String在新创建字符串的时候是在内存里面新开辟了一块内存去存储这个字符串,因为String是静态的,之所以我们看起来是动态的,那是因为JVM把我们欺骗了,在

关于Java基础知识 String StringBuffer StringBuilder三者的区别

Java基础中String StringBuffer StringBuilder 以下介绍 相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder 不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用 StringBuffer:线程安全(

【转载】Java基础之String中equals,声明方式,等大总结

转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识点还是比较多的.今天就和大家来一起讨论一下,关于String的一些容易让人疑惑的地方,废话不多说进入正题...如有谬误请批评指正,如果有疑问请留言.我会在第一时间修改或回答 通过

06. Java基础之String

      通过学习string源码,可以知道String类其实是通过char数组来保存字符串的.String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法. 一. toString Object中有个方法叫toString,所有的子类都可以重写这个方法.System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法.然后toString的基类实现是:该方法返回的是该J

Java基础笔记-String类

String 类(被final修饰) 字符串是一种特殊的对象,一旦字符串被初始化就不可以被改变了.(内容不变) 例如: String  s = “abc”; String  s1 = new String(“abc”); s在内存中有一个对象, s代表的是一个类类型变量,”abc”是一个对象. s1在内存中有两个对象,分别是new出来的和:  “abc” . s == s1;的结果是false.   因为s和s1它们所对应的地址不同,比较的两个地址,s和s1中存储的地址数值是不同的.因此是fal

java基础之string,stringbuffer,stringbuilder

一 string public final class String 继承自java.lang.Object类. 实现了接口: java.io.Serializable, Comparable<String>, CharSequence String类是不能被修改的字符串.因为String类里面的数据是final类型的. 区别两种方式: ① String s = "aaaa": ② String s1 = new String("aaaa"); 对于第一

Java基础之String类、StringBuffer类、StringBuilder类

String类对象有两种实例化方法 直接赋值:只开辟一块对内存空间,可以自动入池. 构造方法:开辟两块[堆]内存空间,不会自动入池,使用intern()方法手动入池. 任何一个字符串都是String类的匿名对象. 字符串一旦声明则不可以改变,可以改变的只是String类对象的引用. String类可以使用 + 进行字符串的连接操作 StringBuffer类的内容可以进行修改,而String类的内容是不可以修改的. 在String类里面,提供了一个与StringBuffer类比较的方法: pub

黑马程序员----java基础:String与StringBuffer及基本数据类型包装类

java中一些基础类比如String.StringBuffer和基本数据类型包装类都是非常常见且使用非常频繁的类.这些类虽然简单,但是想要熟练使用也必须要学习,虽然API文档对这些类的用法都讲的比较详细,但是我觉得还是有必要再整理一下. 一.String类 1.概述 String就是字符串的意思,首先要明确一点的是String并不属于基本数据类型. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 注意new String()

Java基础之String类的细节问题

本文转载自http://sarin.iteye.com/blog/603684/ 先来看一个例子,代码如下: Java代码   public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str ==