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