zoukankan      html  css  js  c++  java
  • java_String和StringBuffer区别分析

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

    在java中有3个类来负责字符的操作。

    1.Character 是进行单个字符操作的,

    2.String 对一串字符进行操作。不可变类。

    3.StringBuffer 也是对一串字符进行操作,但是可变类。

    String:
    是对象不是原始类型.
    为不可变对象,一旦被创建,就不能修改它的值.
    对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
    String 是final类,即不能被继承.

    StringBuffer:
    是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
    它只能通过构造函数来建立,
    StringBuffer sb = new StringBuffer();
    note:不能通过付值符号对他进行付值. 
    sb = "welcome to here!";//error
    对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
    中付值的时候可以通过它的append方法.
    sb.append("hello");

    以上为摘抄,网上常见的,以下为自己添加的见解:

    地址不可更改,长度和内容可改。append()方法是追加,超过预留内存时,内存翻倍。

    效率比较:StringBuffer比String高。因为StringBuffer有预留空间一直追加,只是对一个对象进行操作。而String是不能被修改的,只能重复的去创建对象来实现修改。——如果频繁的对字符串进行追加、替换、修改、插入、删除操作,最好使用StringBuffer。如果必须用String可以使用StringBuffer调用toString()来转换成String即可。

    复制代码代码如下:

    public static void main(String[] args) {
             String a="";
             long begin=System.currentTimeMillis();
             for (int i = 0; i <10000; i++) {
                 a+=i;
             }
             long end=System.currentTimeMillis();
             System.out.println("String运行时间:"+(end-begin));
             System.out.println("-----------------");
             StringBuffer b=new StringBuffer();
             long begin2=System.currentTimeMillis();
             for (int i = 0; i <10000; i++) {
                 b.append(i);
             }
             long end2=System.currentTimeMillis();
             System.out.println("StringBuffer运行时间:"+(end2-begin2));
         }

    我的机子比较垃圾,执行下来结果是

    String运行时间:164593
    -----------------
    StringBuffer运行时间:31

    而且String有contains方法,而StringBuffer没有。contains是包含的意思,这里可以在回忆下contains方法

    复制代码代码如下:

     public static void main(String[] args) {
             String a="abc";
             boolean str=a.contains("b");
             System.out.println(str);
         }

    执行结果为

    true

  • 相关阅读:
    Atitti. 语法树AST、后缀表达式、DAG、三地址代码
    Atitit.antlr实现词法分析
    Atitit.antlr实现词法分析
    Atitit.词法分析的理论原理 part2
    Atitit.词法分析的理论原理 part2
    atitit.词法分析原理 词法分析器 (Lexer)
    atitit.词法分析原理 词法分析器 (Lexer)
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitit.http代理的实现 代码java php c# python
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/5790320.html
Copyright © 2011-2022 走看看