Java基础-字符串

创建字符串

String

String str = "Hello World";    //公共池中
String str2 = new String("Hello World"); //堆中

 

StringBuffer 和 StringBuilder

当需要对字符串进行修改时,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

 

 

 

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类

public class Test{
    public static void main(String[] args){
        StringBuilder sb = new StringBuilder(10);
        sb.append("www...");
        System.out.println(sb);               //www...
        sb.append("baidu"); 
        System.out.println(sb);               //www...baidu
        sb.insert(11, ".com");
        System.out.println(sb);               //www...baidu.com
        sb.delete(4,6);
        System.out.println(s);               //www.baidu.com
    }
}

 

对象的地址

public class Test {
    public static void main(String[] args) {
        String s1 = "abc";            // 常量池
        String s2 = new String("abc");     // 堆内存中
        System.out.println(s1 == s2);        // false两个对象的地址值不一样。
        System.out.println(s1.equals(s2)); // true

        String s3 = "a" + "b" + "c";
        String s4 = "abc";
        System.out.println(s3 == s4); //true
        System.out.println(s3.equals(s4));//true

        String s5 = "ab";
        String s6 = "abc";
        String s7 = s5 + "c";
        // 对于 s7,先创建StringBuilder(或 StringBuffer)对象,通过 append 连接得到 abc ,再调用 toString() 转换得到的地址指向 s7。故 (s7==s6) 为 false。
        System.out.println(s6 == s7);         // false
        System.out.println(s6.equals(s7));  // true
    }
}

 

总结

  • String 长度大小不可变

    字符串实际上就是一个 char 数组,并且内部就是封装了一个 char 数组。并且这里 char 数组是被 final 修饰的:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
  • StringBuffer 和 StringBuilder 长度可变

  • StringBuffer 线程安全 StringBuilder 线程不安全

  • StringBuilder 速度快

 注意:

 

 

 

 

 

ps:length() 方法,length 属性和 size() 方法的区别:

  • length() 方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;
  • length 属性是针对 Java 中的数组来说的,要求数组的长度可以用其 length 属性;
  • Java 中的 size() 方法是针对泛型集合说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看!
public class Test {
    public static void main(String[] args) {
        String array[] = {"First", "Second", "Third"};
        String a = "HelloWorld";
        List<String> list = new ArrayList<String>();
        list.add(a);
        System.out.println("数组array的长度为" + array.length);
        System.out.println("字符串a的长度为" + a.length());
        System.out.println("list中元素个数为" + list.size());
    }
}

 

 
posted @ 2021-09-15 21:20  r1-12king  阅读(41)  评论(0编辑  收藏  举报