zoukankan      html  css  js  c++  java
  • Java 字符串总结

    三种字符串类:String,StringBuilder,StringBuffer

    String类

    1. 常用构造器

    构造器  
    public String(char value[])  
    public String(char value[],int offset,int count)  

     

     

     

     

    2. 常用方法

    方法 功能
    public char charAt(int index) a.charAt[i]类似于C中a[i]
    public char[] toCharArray()  
    public String subString(int begin,int end)  
    public boolean equals(Object o)  
    public int length()  
    public String trim() 将前导和后继空格或缩进(不可见字符)去掉

     

     

     

     

     

     

     

     

     

     

     

     

    3. String对象的不可变性

    存在代码如下

    String a="abab";
    String b= "ab"+"ab";
    System.out.println(a==b);
    b="ab";
    String c=b+"ab";
    System.out.println(a==c);

    结果为true false,原因是Java中每一个String对象都是不可变的。JVM在堆内存中为String对象开辟了一个空间叫做字符串常量池,每个已创建的String对象都会放在这个内存空间中,很显然String c指向的字符串常量和String a指向的字符串常量的地址是不同的,因此输出false。那么 之前比较String a和String b为什么又输出true了呢?,因为Java为了节省内存空间,在两个字符串常量进行连接时会检查池中是否已经存在该目标字符串,如果存在,就直接返回该串的指针。

     

    4. String对象不好的地方

    前面说过,String对象是不变的,因此一旦存在大量的String拼接等变化时,String的效率将会变得很低

    StringBuilder类

    1. 常用构造器

    构造器  
    public StringBuilder(String str)  
    public StringBuilder(int capacity) 指定容量为capacity个字符
    public StringBuilder() 默认容量为16个字符

     

     

    2. 常用方法

    方法 功能
    public StringBuilder append(String str) 可以不设返回,简写可为a.append(b) ,也可写成a=a+b,同时,StringBuilder只能与String拼接
    public StringBuilder insert(int offset,String str)  
    public StringBuilder delete(int start,int end)  
    public StringBuilder reverse()  
    public String toString  

     

     

     

    3. StringBuilder的优缺点

    相对于String对象,在于增删查改方面,StringBuilder效率好多了,但StringBuilder并没有对增删查改方法进行同步,因此StringBuilder类并不是线程安全的,在多线程操作时会出现问题。

    StringBuffer类

    相对于StringBuilder,StringBuffer增加了线程安全机制,方法实现了同步。不过构造器和方法跟StringBuilder基本一样,这里就不再记录~

    不过相较于StringBuilder类,StringBuffer由于实现了同步,可能效率上要比StringBuilder要低一点,不过也很有限。

    对于同一个程序,两者跑完58组数据的时间相差也就100ms左右

  • 相关阅读:
    Eclipse debug模式下使用16进制(Hex)查看变量值
    无线局域网中RADIUS协议原理与实现
    浏览器发送URL的编码特性
    跨域共享cookie和跨域共享session
    Nginx与Apache工作方式
    Http字段含义
    http中有关缓存相关的几个字段
    maven中用yuicompressor和closure-compiler对js、css文件进行压缩
    Mysql 忘记密码----修改Navicat的连接密码--以及--(加入安装Navicat时没设置密码)有时新建连接设置密码,连接不成功---的问题解决方法 密码忘记的解决
    RedisTemplate的各种操作(set、hash、list、string)
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6527469.html
Copyright © 2011-2022 走看看