diff --git a/javaSE-day01/src/com/inmind/stringbuilder06/Demo24.java b/javaSE-day01/src/com/inmind/stringbuilder06/Demo24.java new file mode 100644 index 0000000..84dc895 --- /dev/null +++ b/javaSE-day01/src/com/inmind/stringbuilder06/Demo24.java @@ -0,0 +1,60 @@ +package com.inmind.stringbuilder06; +/* + 注意:string类的拼接,会导致多余的字符串,就会字符串常量池中占用内存,那么可以使用StringBuilder来解决 + ----------------------------------------------------- + StringBuilder() 构造一个没有字符的字符串构建器,初始容量为16个字符。 + StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。 + + StringBuilder的2个常用方法 + public StringBuilder append(...) :添加任意类型数据的字符串形式,并返回当前对象自身。 + public String toString() :将当前StringBuilder对象转换为String对象。 + StringBuilder reverse() 导致该字符序列被序列的相反代替。 + + StringBuilder的弊端:拼接的内容最终都会变成字符串 + + 扩展:StringBuilder与String可以进行转换,目的在于使用各自特有功能 + StringBuilder->String:toString()方法 + String->StringBuilder:构造方法new StringBuilder("abc") + + sb:能够反正,拼接 + String:99%的情况都会使用到的 + + 注意:StringBuilder是线程不安全,但是效率高!!!StringBuffer是线程安全,效率低,他们的API基本雷同 + */ +public class Demo24 { + public static void main(String[] args) { + + String str1 = "hello"; + String str2 = "world"; + String str3 = "haha"; + //这样写字符串对象有几个???会产生5个,尽量不要在for循环中使用+号拼接出一个结果 + System.out.println(str1+str2+str3); + //使用StringBuilder来进行字符串的拼接 + StringBuilder sb = new StringBuilder();//sb保存的是地址 + StringBuilder sb1 = sb.append(str1);//sb1保存的是地址 + System.out.println(sb == sb1);//在引用数据类型中,==就是比较地址 + //链式调用:可以像链条一样拼接新的内容 + StringBuilder sb2 = sb.append(1.0).append(2.0F).append(true) + .append(1).append("heihei").append(new char[]{'a', 'b', 'c'}); + System.out.println(sb == sb1); + System.out.println(sb == sb2); + + //假设for循环对一个很长内容的数据进行拼接完毕,最终我们希望得到这个String + //StringBuilder---->String + String sbStr = sb.toString(); + System.out.println(sbStr);//println方法打印任何引用数据类型时,底层源码一定是调用的该引用数据类型的toString方法返回的内容 + System.out.println(sb); + System.out.println(sb1); + System.out.println(sb2); + + //请帮我将1~100的数字拼接成字符串 + String str = "开始"; + StringBuilder sb3 = new StringBuilder(str); + for (int i = 1; i <= 100; i++) { + //str+=i;//产生非常多的不需要字符串常量,占用内存 + sb3.append(i); + } + System.out.println(sb3); + System.out.println(sb3.reverse()); + } +}