String类和StringBuffer类

String类和StringBuffer类

String类

  • java的8种基本数据类型里面并没有字符串类型,String类代表的是字符串,我们可以通过调用String类的方法来实现字符串的操作。
    字符串声明的两种方式,通常我们用第一种就可以了:
String str="This is a String";
String str=new String("This is a String");
  • 字符串可以通过“+”来串联,不论“+”后面跟的是什么类型的数据都将变为字符串的形式。下面的例子输出结果相同
String str=new String("This is a String");
str+=12.3;
str=str+1+2+"."+3
//输出结果都为:This is a String12.3
  • 字符串的本质是字符数组
char []ch={'A','B','C','D','E','F','G'};
System.out.println(ch);
  • String池
    前面说到了声明字符串的两种方式:String str=”abc”和String str=new String(“abc”);
    前者这种方式java会去“String池”搜索”abc”,如果有就把这个”abc”赋给str,如果没有就新建一个”abc”再赋给str。
    后者会直接生成一个”abc”赋给str。这就是为什么我们通常选用第一种方式的原因,因为这种方式更高效。
  • 字符串有很多方法供我们使用,我们可以查看api文档。

StringBuffer

前面介绍了String类,但是我们知道String的值是不能改变的,值只要改变就会变成新的对象,创建对象的过程是很消耗性能的。因此就产生了StringBuffer类,StringBuffer可以很方便的增删查改字符串的内容而不会改变对象。
String的大多数方法StringBuffer都可以使用,除此之外还增加了String没有的插入和删除字符串的方法。

StringBuffer buf=new StringBuffer();
buf.addend(12);//类似string的串联
buf.insert(0,"abc");//在开头位置插入abc
buf.delete(0,5)//删除下标从0到5且不包含5的字符

StringBuffer和String性能的比较

public static long testStringBuffer(int n) {
        long start = System.currentTimeMillis();
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < n; i++)
            buf.append(0);
        long end = System.currentTimeMillis();
        return end - start;
    }

    public static long testString(int n) {
        long start = System.currentTimeMillis();
        String buf = "";
        for (int i = 0; i < n; i++)
            buf += "A";
        long end = System.currentTimeMillis();
        return end - start;
    }

n=100000时的结果(单位:ms):

StringBuffer:40
String:19371

demo:

public class StringDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StringBuffer buf = new StringBuffer();
        System.out.println(buf.capacity());

        buf.append("String").append("Buffer~~~~~~~~~~~");
        System.out.println(buf.toString() + "   " + buf.capacity());

        buf.insert(0, "helloworld!");
        System.out.println(buf.toString() + "   " + buf.capacity());

        buf.delete(0, 5);
        System.out.println(buf.toString() + "   " + buf.capacity());

        System.out.println("StringBuffer:" + testStringBuffer(100000));
        System.out.println("String:" + testString(100000));
    }

    public static long testStringBuffer(int n) {
        long start = System.currentTimeMillis();
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < n; i++)
            buf.append(0);
        long end = System.currentTimeMillis();
        return end - start;
    }

    public static long testString(int n) {
        long start = System.currentTimeMillis();
        String buf = "";
        for (int i = 0; i < n; i++)
            buf += "A";
        long end = System.currentTimeMillis();
        return end - start;
    }
}

你可能感兴趣的:(java学习笔记)