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()); } }