String和StringBuffer及StringBuilder的区别

String和StringBuffer及StringBuilder的区别

1、String类的内容是不可改变的。能改变的只是其内存指向。
2、String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
3、StringBuffer类的对象内容是可以修改的。
4、String可以直接通过赋值的方式实现对象实例化,而StringBuffer只能通过构造方法的方式对象实例化。
5、StringBuffer在处理字符串的时候,不会生成新的对象。从内存这个角度来说,StringBuffer要比String更好。
6、StringBuffer是线程安全的,速度慢。
StringBuilder是线程不安全的,不能同步访问,执行速度快。

1.StringBuilder概述

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,耗费时间和空间,而这种操作还不可避免。所以就用StringBuilder类来解决这个问题。

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变是指StringBuilder对象中的内容是可变的

1.1 String和StringBuilder的区别
  • String:内容是不可变得
  • StringBuilder:内容是可变的
1.2 StringBuilder的构造方法
方法名 说明
public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
public class StringBuilderDemo {
    public static void main(String[] args) {
        //创建空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length():" + sb.length());

        //根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length():" + sb2.length());
    }
}

/*
sb:
sb.length():0
sb2:hello
sb2.length():5
*/
1.3 StringBuilder的添加和反转方法
方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 返回相反的字符序列
public class StringBuilderDemo2 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        //public StringBuilder append(任意类型),添加数据,并返回对象本身
//        StringBuilder sb2 = sb.append("hello");
//        System.out.println("sb:" + sb);
//        System.out.println("sb2:" + sb2);
//        System.out.println(sb == sb2);

//        sb.append("hello");
//        sb.append("world");
//        sb.append("Java");
//        sb.append("123");

        //链式编程
        sb.append("hello").append("world").append("java").append(100);
        System.out.println("sb:" + sb);

        //public StringBuilder reverse():返回相反的字符序列
        sb.reverse();
        System.out.println("sb:" + sb);
    }
}
/*
sb:helloworldjava100
sb:001avajdlrowolleh
*/

2.StringBuilder 和 String 相互转换

1.StringBuilder转换为String

public String toString(): 通过 toString)就可以实现把StringBuilder转换为String

2.String转换为StringBuilder

public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder

public class StringBuilderDemo3 {
    public static void main(String[] args) {
        /*1.StringBuilder转换为String
//      StringBuilder转换为String
        StringBuilder sb = new StringBuilder();
        sb.append("hello");

        //String s = sb; 错误
        String s = sb.toString();
        System.out.println(s);
         */
//2.String转换为StringBuilder
        String s = "hello";
        StringBuilder sb = new StringBuilder(s);
        System.out.println(sb);
    }
}

案例

String和StringBuffer及StringBuilder的区别_第1张图片

public class StringBuilderDemo4 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};

        String s = arrayToString(arr);
        System.out.println("s:" + s);
    }

    public static String arrayToString(int[] arr){

        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i=0;i<arr.length;i++){
            if (i==arr.length-1){
                sb.append(arr[i]);
            }else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");

        String s = sb.toString();
        return s;
    }
}

案例:反转字符串

需求:
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结果cba
思路:
1:键盘录入一个字符串,用Scanner实现
2:定义一个方法,实现字符串反转。返回值类型string,参数string s
3:在方法中用stringBuilder实现字符串的反转,并把结果转成string返回
4:调用方法,用一个变量接收结果
5:输出结果

public class StringBuilderDemo5 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用Scanner实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();
        //调用方法,用一个变量接收结果
        String s = myReverse(line);
        //输出结果
        System.out.println("s:" + s);
    }
    //定义一个方法,实现字符串反转。返回值类型String,参数String s
    public static String myReverse(String s){
        //在方法中用StringBuilder实现字符串的反转,并把结果转成string返回
//        StringBuilder sb = new StringBuilder(s);
//        sb.reverse();
//        String ss = sb.toString();
//        return ss;

        return new StringBuilder(s).reverse().toString();
    }

}

你可能感兴趣的:(java,开发语言)