zoukankan      html  css  js  c++  java
  • String和StringBuffer和StringBuilder

    String

    Java语言中用String类代表不可变的字符串,它是由任意多个字符组成的序列。程序中需要存储大量的信息时,一般都用String对象。

    1.字符串初始化

    JavaSE API为字符串对象的初始化提供了多种类型的构造器。

    String str=new String(“corejava”);(这个是把JVM中的常量池的内容复制到堆空间中,不节省空间)

    String s=“corejava”;(//这种较为简洁,且节省空间,只是在JVM的常量池中寻找或创建一个corejava)

     

    2.常用操作

    1)获取字符的长度,如“corejava”.length();返回长度是8

    2)字符串比较

    ==表示字符串变量是否引用自同一个字符串对象

    更常用的是用String类中覆盖Object类的equals方法比较两个字符串变量所引用的字符串对象内容是否相同

     

     1 /*字符串比较*/
     2 public class StringCompareTest{
     3     public static void main(String[] args) {
     4         String s1="abc中文";
     5         String s2="abc中文";
     6         String s3=new String("abc中文");
     7         System.out.println(s1==s2);//false
     8         System.out.println(s1.equals(s2));//true
     9         System.out.println("----------");
    10         System.out.println(s1==s3);//false
    11         System.out.println(s1.equals(s3));//true
    12     }
    13 }
    14 /*
    15 运行结果:
    16 true
    17 true
    18 ----------
    19 false
    20 true
    21 */
    22 //比较内容相等就用equals
    23 System.out.println(s1==s2);//为什么这个是true?

    另外,看看HashSet里面重写equals和Hashcode方法!!

     

     

     

    StringBuilder和StringBuffer类

    在Java SE API中还提供了StringBuilder和StringBuffer类,用来代表可变的字符串。

    它们适用于需要对字符串内容进行频繁修改的情况,以提高性能。

    StringBuilder类和StringBuffer类提供了相同的操作方法,只是StringBuilder类的方法

    不保证线程同步。

    StringBuilder类常用的构造器有以下两个:

    1)StringBuilder():用来构造一个其中不带字符的字符串生成器,初始容量为16个字符。

    2)StringBuilder(String str):构造一个字符串生成器,并将其内容初始化为指定的字符串内容。

     

    例子:

     1 public class StringBuilderTest{
     2     public static void main(String[] args) {
     3         StringBuilder sb=new StringBuilder("CoreJava");
     4         sb.append(" Action ");//追加
     5         sb.append(1.0);//追加
     6         sb.insert(9,"In ");//指定索引处插入
     7         String s=sb.toString();//转换为字符串
     8         System.out.println(s);
     9     }
    10 }
    11 //运行结果:CoreJava In Action 1.0

    说明:

    StringBuilder类提供的修改字符串内容的方法执行完成后都会返回自身的引用。

    所以,连续调用StringBuilder类中的多个方法时,还可以使用如下的实例中的

    “方法链”方式:

     

    /*使用StringBuilder关键字字符串内容*/

    StringBuilder sb=new StringBuilder(“CoreJava”);
    sb.append(“ Action ”);
    sb.append(1.0);
    sb.append(9,”In ”);

    String、StringBuffer、StringBuild和StringTokenizer的区别?

            String用于字符串操作,属于不可变类(//即类对象被创建后其值不可改,使用场景是适合被共享,若修饰会被修改的对象时,相比于StringBuffer会生成很多无用的对象,且会被垃圾回收器回收,当项目变大的时候,这会严重影响程序的性能),而StringBuffer也是用于字符串操作,不同之处在于StringBuffer属于可变类(//即当对象被创建之后仍然可以对其值进行修改,所以当一个字符串的值会被经常更改时,用它)。

            /*说明:String修改字符串的原理如下:先创建一个StringBuffer,其次调用StringBuffer的Append()方法,最后调用StringBuffer的toString方法把结果返回,显然降低了执行效率*/

    String s=“Hello”;

    s+=“world”;

    <==>与上代码等价

    StringBuffer sb=new StringBuffer(s);

    s.append(“world”);

    s=sb.toString();

           另外,String和StringBuffer的区别在于String可以用用构造函数的方法进行初始化,也可以用赋值的方式来进行初始化,而StringBuffer只能用构造函数的方法来进行初始化

     

          从执行效率来讲,StringBuilder最高,StringBuffer次之,String最低,若数据量小,用String类;如果单线程操作大量的数据用StringBuilder类(用多线程不安全);如果多线程下操作大量的数据,考虑StringBuffer类;而StringTokenizer是用来分隔

    字符串的工具类。

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    继承LIst 的类JSON序列化,无法序列化属性的问题
    C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
    12.Java web--过滤器与监听器
    11.Java web—servlet
    10.Java web—JavaBean
    9.Java web—JSP内置对象
    8.Java web—JSP基本语法
    Ubuntu 插入鼠标自动禁用触控板
    Ubuntu安装VLC播放器
    Ubuntu快捷键
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8433651.html
Copyright © 2011-2022 走看看