Character类 ,String类,StringBuffer类,StringBuilder类
在java中有主要有4个类来负责字符及字符串的操作。
1. Character 是对单个字符操作的
2. String 是对象不是基本数据类型,字符串是一个特殊的对象。字符串一旦初始化就不可以被改变。
(数据内容不能变,不是说字符串的引用不能变).
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
3. StringBuffer 也是对一串字符进行操作,但是可变类。
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,StringBuffer sb = new StringBuffer();
不能通过赋值符号对他进行赋值. sb = "welcome to here!"; //error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
(2) 下面的s和s2的区别:
String s = new String("abc"); 在创建s的时候,有两个对象被创建。
String s2 = "abc"; 在创建s2的时候,有一个对象被创建。
直接赋值字符串常量是直接拿字符串常量池里面的值。
(3) StringBuffer和StringBuilder:
字符串的组成原理就是通过该类实现的。是字符串缓冲区类。是一个容器。
字符串是固定的,StringBuffer可以对字符串内容进行增删,是可变长度的。
而且通过测试可知道的它容量的变化 (上次的容量*2+2)
StringBuffer是一个容器。很多方法与String相同。
StingBuffer是可变长度的,JDK1.5出现一个StringBuilder,方法完全一样.
构造方法:
StringBuffer():默认容量16
StringBuffer(int capacity): 指定容量capacity
StringBuffer(String str): 默认容量16+str.length()
(4) String和StringBuffer的相互转换
String --> StringBuffer
StringBuffer buffer = new StringBuffer(String str);
StringBuffer buffer = new StringBuffer();
buffer.append(String str)
StringBuffer --> String
String s = new String(StringBuffer buffer);
String s = buffer.toString();
(5) 区别是StringBuffer是同步的,StringBuilder是非同步的。
|