Java基础之(二十八)String、StringBuffer和StringBuilder类
来源:互联网 发布:java web电子书下载 编辑:程序博客网 时间:2024/06/06 17:07
说明
字符串是一连串的字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供了系列方法来操作字符串对象。
String类是不可变类,即一旦一个String对象呗创建以后,包含在这个对象的字符串序列是不可改变的,直至这个对象被销毁。
StringBuffer对象则代表一个字符串序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append、insert、reverse、setCharAt、setLength等方法可以改变这个字符串序列对象的字符串序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象。
JDK1.5又新增了一个StringBuilder类,它代表了字符串对象。实际上,StringBuilder和StringBuffer基本类似,两个
类的构造器和方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,应该优先考虑使用StringBuilder类。
String类提供了大量构造器来创建String对象,其中如下几个有特殊用途:
String():创建一个包含0个字符串序列的String对象(并不是返回null)。
String(byte[]bytes,Charset
charset):使用指定的字符集将指定的byte数组解码成一个新的String对象。String(byte[]bytes,int offset,int length):使用平台的默认字符集将指定的byte数组的offset开始鼓、长度为length的子数组解码成一个新的String对象。
String(byte[]bytes,int offset,int length,String charsetName):使用指定的字符集将指定byte数组的offset开始、长度为length的子数组解码成一个新的String对象。
String(byte[]bytes,String charsetName):使用指定的字符集将指定的byte数组解码成一个新的String对象。
String(char[]values,int offset,int count):将指定字符串数组从offset开始、长度为count的字数组中的字符元素连缀 成字符串。
String(String original):根据字符串直接量来创建一个String对象。也就是说,新创建的String对象时该参数字符串的副本。
String(StringBuffer buffer):根据StringBuffer对象来创建对应的String对象。
String(StringBuilder builder):根据StringBuilder对象来创建对应的String对象。
String类也提供了大量方法来操作字符串对象,下面详细介绍这些常用方法:
- char charAt(int index):取字符串中的指定位置的字符,其中,参数index指的是字符串序数。如下代码:
String s = new String("abcdefghijklmn");System.out.println("s.charAt(5):" + s.charAt(5));
输出结果:s.charAt(5):5
- int compareTo(String anotherString):拿当前String对象与anotherString对象比较。如果两个字符串的字符序列相等则返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。
String s1 = new String("abcdefghijklmn");String s2 = new String("abcdefghij");String s3 = new String("abcdefghijalmn");System.out.println("s1.compareTo(s2): "+s1.compareTo(s2);//返回长度差System.out.println("s1.compareTo(s3): "+s1.compareTo(s3);//返回'k'-'a'的差
输出结果:s1.compareTo(s2): 4s1.compareTo(s3): 10
后面关于String的方法还有很多,详细了解可以查询api。这里就不赘述了。
StringBuilder
我们主要讲讲String和StringBuffer以及StringBuilder的区别:
String类是不可改变的,String实例一旦生成就不会再改变了,例如如下代码:
String str = “java” + “struts” + “spring”;上面程序除了使用4个字符串直接常量之外,还会额外生成2个字符串常量,其中“java”和“struts”生成了”javastruts”保存在内存中,接着“javastruts”与“spring”生成“javastrutsspring”字符串,并将它赋给str变量。因为String是不可变的,所以会额外产生很多的临时变量,使用StringBuffer或StringBuilder就可以避免这个问题。
StringBuilder、StringBuffer有两个属性:length和capacity,其中length属性代表了其包含的字符串序列长度,与String对象的length不同的是,StringBuilder、StringBuffer的length是可以改变的,可以通过length()和setLength(int len)方法里访问和修改其字符串序列的长度。capacity属性代表了StringBuilder的容量,capacity通常比length大,程序通常不关心capacity的属性。下面程序示范了StringBuilder类的用法:
public class TestStringBuilder { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); //追加字符 sb.append("java");//sb="java"; //插入 sb.insert(0, "hello ");//sb="hello java"; //替换 sb.replace(5, 6, ",");//sb="hello,java"; //删除 sb.delete(5, 6);//sb="hellojava"; System.out.println(sb.toString()); //反转 sb.reverse();//sb="avajolleh"; System.out.println(sb.toString()); System.out.println(sb.length());//输出9 System.out.println(sb.capacity());//输出16 //改变StringBuilder的长度,将只保留前面部分 sb.setLength(5);//sb="avajo"; System.out.println(sb.toString()); } }
上面的程序中示范了StringBuilder的基本操作,这些操作改变了StringBuilder里的字符序列,这就是StringBuilder与String之间最大的区别:StringBuilder的字符序列是可变的。
另外一个区别是String覆盖了equals方法和hashCode方法,而StringBuilder并没有覆盖这两个方法。
- Java基础之(二十八)String、StringBuffer和StringBuilder类
- java基础 之 String类 StringBuffer StringBuilder
- java基础(二)------ String,StringBuffer,StringBuilder有什么区别?
- java基础笔记之String、StringBuffer、StringBuilder
- Java基础之String,StringBuilder,StringBuffer
- java基础02 String、StringBuffer和StringBuilder
- Java基础回顾 : String、StringBuffer和StringBuilder
- Java基础:StringBuilder、StringBuffer和String
- Java(5):基础:String、StringBuffer和StringBuilder的区别
- Java之String类、StringBuffer类和StringBuilder类
- java常见类(二)String,StringBuffer,StringBuilder
- 【Java基础】String,StringBuffer, StringBuilder
- java基础<String-StringBuffer-StringBuilder>
- Java基础 String StringBuffer StringBuilder
- 【Java基础】String StringBuffer StringBuilder
- java基础-String/StringBuffer/StringBuilder
- Java基础--String、stringbuffer、stringbuilder
- 【Java基础之String、StringBuilder、StringBuffer】Java中的String、StringBuilder以及StringBuffer的区别
- 今天第一天学习PHP正则
- png转jpg java
- 记录下server的配置
- webpack介绍及使用(一)
- CAS单点登录教程
- Java基础之(二十八)String、StringBuffer和StringBuilder类
- jquery制作网页标签的行为
- css3垂直居中方式
- was 配置
- AndroidManifest.xml代码分析(笔记)
- 深入理解JavaScript的闭包特性 如何给循环中的对象添加事件
- day10——Python作用域
- 手机连上WIFI,再利用蓝牙使笔记本电脑共享此WIFI
- android 获取短信验证码倒计时功能