• java 中操作String、StringBuffer、StringBuilder字符串类都有哪些类?它们之间有什么区别?


    操作字符串的类有:String、StringBuffer、StringBuilder都是final修饰的

     String 类是不可变的类,就是说String对象声明后不能修改,,如对字符串修改都会创建新的对象

     ==:在基本数据类型比较的是值,在引用类型比较的是内存地址

    String s1 = "abc";
    s1 = "def";
    s1 = "123";
    s1 = "456";
    System.out.println(s1);
    //s1无论赋值多少次,就取最后的那个值为最终结果
    System.out.println(s1==s1);
    //无论是==还是equals都是s1本事所以都是true
    //equals:比较的是里面的内容
    System.out.println(s1.equals(s1));
    String s2 = "hi";
    String s3 = "hi";
    //值是一样的,字符串是一样,
    // hashcode是根据字符串的内容去计算的,字符串是一样,计算出来也是一样的,
    // equals也是字符串里面的内容,也是一样
    System.out.println(("s2==s3 :")+(s2==s3));// true
    System.out.println(("s2= ")+(s2.hashCode()));//s2= 3329
    System.out.println(("s3= ")+(s3.hashCode()));//s3= 3329
    System.out.println(("s2:s3 ")+(s2.equals(s3)));// true

    String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象

    StringBuffer、StringBuilder 可以在原有对象的基础上进行操作

    经常改变字符串内容的情况下最好不要使用 String。 

    StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的

    StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer

    在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer

    ---------------------------------------------------------String举例------------------------------------------------------------------------------------

    String s6 = "aaa";
    String s7 = "bbb";
    String s8 = s6 + s7;
    System.out.println(("s6+s7: ")+(s6.equals(s7)));//false
    System.out.println(s6==s7);//fa;se
    System.out.println(s6.hashCode());//96321
    System.out.println(s7.hashCode());//97314
    //以下程序在执行的时候在字符串常量池中会创建一个字符串对象
    System.out.println(("s8: ")+(s8));//s8: aaabbb

    String s9 = "abc";
    String s10 = "a";
    String s11 = "bc";
    String s12 = s10 + s11;
    System.out.println(s12);//abc
    System.out.println(s9.equals(s12));//true
    //只要采用双引号复制字符串,在编译器确定将会放在方法区,若运行时对字符串变量相加会放在堆区
    System.out.println(s9 == s12);//false--->>>>若运行时对字符串变量相加会放在堆区
    System.out.println(s9 == ("a" + "bc"));//true

    ----------------------StringBuffer-----------------------------
    /*
    字符串缓冲区:工作原理,先申请一块内存,存放字符串序列如满,
    就会重新改变缓存区的大小,容纳更多字符序列
    是可变对象,这个是与String最大的不同
    */
    public class StringBufferD {
    public static void main(String[] args) {
    StringBuffer buffer = new StringBuffer();
    for (int i=0;i<100;i++) {
    buffer.append(i);
    //System.out.println( buffer.append(i));
    buffer.append(",");
    //System.out.println( buffer.append(","));
    //buffer.append(i).append(",");
    //System.out.println( buffer.append(i).append(","));
    //拼串去掉逗号
    buffer.append(i);
    if (i != 99) {
    // buffer.append(",");
    //System.out.println(buffer.append(i));
    }
    //System.out.println(buffer);
    //System.out.println("");
    //System.out.println(buffer.toString());
    System.out.println(buffer.toString().substring(0, buffer.toString().length() - 1));

    }


    }
    }----------------------运行结果-------------------

    0,
    0,01,
    0,01,12,
    0,01,12,23,
    0,01,12,23,34,
    0,01,12,23,34,45,
    0,01,12,23,34,45,56,
    0,01,12,23,34,45,56,67,
    0,01,12,23,34,45,56,67,78,
    ........运行完为止:工作原理,先申请一块内存,存放字符串序列如满,就会重新改变缓存区的大小,容纳更多字符序列是可变对象

    -----------------StringBuilder---------------------------

    /*StringBuilder与StringBuffer用法相同
    区别:StringBuffer中所有方法都是同步,是线程安全的
    底层代码方法是synchronized修饰

    列子:
    @Override
    public synchronized int length() {
    return count;
    }

    StringBuilder速度快,不是线程安全的
    两个类都有相同的方法集:append:添加在尾部 insert:插入 replace:替换字符串
    indexOf/lastIndexOf:返回子串的位置索引
    substring:取子字符串序列
    toString:转换为String对象
    */
    -----------------StringBuffer字符串翻转reverse()方法--------------------------------------------
    public class StringBufferD {
    public static void main(String[] args) {
    StringBuffer buffer = new StringBuffer();

    //字符串翻转reverse()方法
    buffer.append("abcdefg");
    System.out.println(buffer.reverse());//gfedcba

    }
    }
    -----------------StringBuilder字符串翻转reverse()方法--------------------------------------------
    public class StringBuilderD {
    public static void main(String[] args) {
    StringBuilder builder = new StringBuilder("123");
    builder.append("123456789");//987654321321
    System.out.println(builder.reverse());

    }
    }

    10. String 类的常用方法都有那些?

    • indexOf():返回指定字符的索引。

    • charAt():返回指定索引处的字符。

    • replace():字符串替换。

    • trim():去除字符串两端空白。

    • split():分割字符串,返回一个分割后的字符串数组。

    • getBytes():返回字符串的 byte 类型数组。

    • length():返回字符串长度。

    • toLowerCase():将字符串转成小写字母。

    • toUpperCase():将字符串转成大写字符。

    • substring():截取字符串。

    • equals():字符串比较。





  • 相关阅读:
    OO设计精要:封装,还是封装(有感于“Why getter and setter methods are evil ”by Allen Holub )
    博客园建议:能否记住在博客园的首页上只显示标题
    戴尔国际英语
    C#代码契约(转)
    C#数组传递和返回
    SecureString
    里氏替换原则
    ASP.NET的Cache(转)
    WCF服务
    C#枚举中的位运算权限分配
  • 原文地址:https://www.cnblogs.com/Koma-vv/p/13455983.html
Copyright © 2020-2023  润新知