1. package test;
    2. public class Main {
    3. public static void main(String[] args) {
    4. String str = null;// ok
    5. StringBuffer sb = new StringBuffer(); //ok
    6. sb.append(str);//需要看源码 , 底层调用的是 AbstractStringBuilder 的 appendNull
    7. System.out.println(sb.length());//4
    8. System.out.println(sb);//null
    9. //下面的构造器,会抛出NullpointerException
    10. StringBuffer sb1 = new StringBuffer(str);//看底层源码 super(str.length() + 16);
    11. System.out.println(sb1);
    12. }
    13. }

    image.png

    1. package test;
    2. public class Main {
    3. public static void main(String[] args) {
    4. /*
    5. 输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:
    6. 商品名 商品价格
    7. 手机 123,564.59 //比如 价格 3,456,789.88
    8. 要求:价格的小数点前面每三位用逗号隔开, 在输出。
    9. 思路分析
    10. 1. 定义一个Scanner 对象,接收用户输入的 价格(String)
    11. 2. 希望使用到 StringBuffer的 insert ,需要将 String 转成 StringBuffer
    12. 3. 然后使用相关方法进行字符串的处理
    13. 代码实现
    14. */
    15. //new Scanner(System.in)
    16. String price = "8123564.59";
    17. StringBuffer sb = new StringBuffer(price);
    18. //先完成一个最简单的实现123,564.59
    19. //找到小数点的索引,然后在该位置的前3位,插入,即可
    20. // int i = sb.lastIndexOf(".");
    21. // sb = sb.insert(i - 3, ",");
    22. //上面的两步需要做一个循环处理,才是正确的
    23. for (int i = sb.lastIndexOf(".") - 3; i > 0; i -= 3) {
    24. sb = sb.insert(i, ",");
    25. }
    26. System.out.println(sb);//8,123,564.59
    27. }
    28. }

    image.png