StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对String的改变都 会引发新的String对象的生成:StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象.既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer吧! 先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,…
字符串常用的操作就是拼接,特别是SQL语句的拼接. 做了个简单的试验,它们之间的差别惊人! StringBuffer: public void testStringBuffer() { long start = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < COUNT; i++) { sb.append(STR_INIT); } long end = System.cur…
本来这篇博文的内容,本人打算在之后的代码中一点一点通过实例讲解的,但是,本人发现,其实这里的知识点还是蛮重要的. 并且,字符串类型,在任何的程序语言中都是被认真对待的,所以,今天专门写一篇博文来介绍一下这个知识点! 目录 [toc] String类: StringBuffer类 和 StringBuilder类: 首先,什么是字符串呢? 相信学习过C语言的同学能够知道: 字符串是由多个字符组成的一串数据(字符序列) 字符串可以看成是字符数组 没错,再Java中,也是这样的,但是,相比于C语言,J…
String类: String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明.在Java中用String类的构造方法来创建字符串变量. 声明字符串:声明一个字符串就是创建一个字符串对象. //可以声明单个也可以同时声明多个字符串对象,声明不赋值,这个对象就是空, 也就是 String a= null; String a; String b,c; 创建字符串:给字符串赋值就是创建字符串的过程. 1.给字符串赋值的四种方法: (1).引用字符串常量…
(1)String是字符串常量,一旦创建之后不可更改:StringBuffer和StringBuilder是字符串变量,可以更改.String的不可变,所以适合作为Map的键. (2)StringBuilder 是线程不安全的,StringBuffer是线程安全的,使用了Synchronized关键字,即线程锁. (3)字符串拼接时的效率:StringBuilder > StringBuffer > String. (4)如果操作少量的数据用 String,单线程下操作大量数据用StringB…
/*如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 笔试题目:使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 死,自动增长1倍. StringBuffer 是一个存储字符的容器 容器的具备…
String:查看源码得知,String类的声明是:public final,所以可以很清楚的知道,fianl的话是改变不了的,所以,如果我们用String来操作字符串的时候,一旦我们字符串的值改变,就会在内存创建多一个空间来保存新的字符串,可想而知,一旦遇到复杂的操作,用String是多么低效率的事啊! 所以,一般涉及到字符串操作的,我们一般使用StringBuffer或者StringBuilder,但是这两者都又有什么区别呢,下面我来说说: 查看源码可以得知:StringBuffer和Str…
String是字符串常量对象,对其进行改变时会相当影响效率,特别注意在循环中直接拼接字符串效率非常差. 如果你想改变字符串的值,更加推荐使用StringBuffer与StringBuilder两种可变的字符串对象. StringBuffer与StringBuilder的主要区别在于线程安全上: StringBuffer是线程安全型,StringBuilder非线程安全. 如果确定应用只在单线程上运行时,更推荐使用StringBuilder,因为其运行效率更高. 使用场景总结: 如果确定字符串不需…
1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间.String a = "a"; //假设a指向地址0x0001a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址.因此String的操作都是改变赋值地址而不是改变值操作.2. StringBuffer是…
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象. StringBuilder和StringBuffer功能基本相似,StringBuilder是非线程安全的. 1. String(不可变.String类是final的,不可以被继承) String的值是不可变的,这就导致每次对String的操作都会生成新的S…