字符串—StringBuilder

目录

2.StringBuilder

2.1StringBuilder在内存中的执行流程

2.2StringBuilder概述

2.3StringBiilder构造方法

2.4StringBuilde的添加和反转方法

2.5StringBuilder和String相互转


2.StringBuilder

(学完StringBuilder之后要求能够知道String和StringBuilder的区别以及能够使用StringBuilder完成需求)

2.1StringBuilder在内存中的执行流程

为了讲明白StringBuilder我们先来看一下字符串的操作

这里由一串代码,在main方法中String s =“hello”;

s += “world”;

并输出了s的值,那s的值应该是多少呢?

首先main方法会进入到栈内存中,String s会进入到main方法里面,而hello是一个常量,就会在堆内存中的常量池里出现它有个地址001,把001赋值给s

那么这个s就通过001指向了堆内存常量池里的001对应的数据内容

然后s += “world”;就相当于s = s + “world”;

这里又出现了一个world这样的一个常量,然后就会到堆内存中的常量池去找“world”结果没有“world”这个字符串常量,他就会在常量池添加一个常量对象002,它的内容是“world”,

然后就是s + “world”,s它是001,它的内容是“hello”,“hello”加上“world”内容是“helloworld”这个常量对象,所有在这里也会出现“helloworld”这样一个创建对象,它的地址是003,最后把这个003赋值给这个s,然后这个s就通过003指向了常量池的003对应的“helloworld”,

最后输出这个s的时候就是输出的003里面对应的内容:“helloworld”

最后在堆内存里面我们终使用的s其实是003里面的内容,001和002的内容就浪费掉了。

所以重点要说(下图):

2.2StringBuilder概述

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器。这里的可变指的是StringBuilder对象中的内容是可变的。(就是说他在做拼接的时候是不会创建一个对象的)

String和StringBuilder的区别:

String:内容是不可变的

StringBuilder:内容是可变的

2.3StringBiilder构造方法

先到帮助文档查看StringBilder构造方法

了解之后,到代码中演示:

/*
    StringBuilder构造方法:
        public StringBuilder();创建一个空白可变字符串对象,不含有任何内容
        public StringBuilder(String str);根据字符串的内容,来创建可变字符串对象
 */
public class StringBuiDemo {

    public static void main(String[] args) {
        //public StringBuilder();创建一个空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        //这里在控制台输出了sb:   没有其他任何内容,因为我们创建的是空白可变字符串对象,没有任何内容
        System.out.println("sb:" + sb);
        //我们来使用这个方法
        System.out.println("sb.length():" + sb.length());//它的长度是0

        //public StringBuilder(String str);根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2“" + sb2);//输出了 hello
        //我们来使用这个方法
        System.out.println("sb2.length():" + sb2.length());//它的长度是5
    }
}

2.4StringBuilde的添加和反转方法

代码演示:

/*
    String Builder的添加和反转方法
        public StringBuilder append(任意类型):添加数据,并返回对象本身
        public StringBuilder reverse():返回相反的字符序列
 */
public class StringBuilder_FZ_Demo {
    public static void main(String[] args) {
        //要调方法首先得有对象
        StringBuilder sb = new StringBuilder();

        //有了对象之后调方法:public StringBuilder append(任意类型):添加数据,并返回对象本身
        //StringBuilder sb2 = sb.append("hello");

        //System.out.println("sb:" + sb);//2.但是为什么这里也是hello呢?
        //System.out.println("sb2:" + sb2);//1.这里肯定是hello

        //3.看下列解释
        //System.out.println(sb == sb2);//返回的是true,说明sb和sb2是同一个对象

        //4.它添加数据,并返回对象本身也就是说明返回的是自己,也就是说我们不需要一个StringBuilder来接收了

        //5.可以直接写:对象.append(); 因为返回的是对象本身,因为对象本身也是个对象,是对象就可以调用方法
        //sb.append("hello");
        //sb.append("world");
        //sb.append("java");
        //sb.append(100);
        //System.out.println("sb:" + sb);// sb:helloworldjava100
        //System.out.println("================");
        //6.上面5.那样写也是没有问题的,当然也可以改进一下,采用链式编程:
        sb.append("hello").append("world").append("java").append(100);
        System.out.println("sb:" + sb);//也会得到sb:helloworldjava100

        //7.public StringBuilder reverse():返回相反的字符序列。反转方法演示:
        sb.reverse();//reverse直接实现了把sb的内容反转
        System.out.println("sb:" + sb);//会得到 001avajdlrowolleh
    }
}

2.5StringBuilder和String相互转

(为什么要学习StringBuilder和String相互转换因为StringBuilder中有两个比较好用的方法一个是append,一个是reverse,如果String想使用这两个方法是使用不了的,所以得先想办法把String转换为StringBuilder,最后还得把StringBuilder转回String,所以要学习它们的相互转换)

  1. StringBuilder转换为String

public String toString():通过toString()就可以实现把StringBuilder转换为String。

  1. String转换为StringBuilder

public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder。

代码演示:

/*
    1.	StringBuilder转换为String
        public String toString():通过toString()就可以实现把StringBuilder转换为String。
    2.	String转换为StringBuilder
        public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder。
 */
public class StringZHDemo {
    public static void main(String[] args) {
        //StringBuilder转换为String
        StringBuilder sb = new StringBuilder();
        sb.append("hello");
        //String s = sb;这样直接转换是不可以的

        //public String toString():通过toString()就可以实现把StringBuilder转换为String。
        String s = sb.toString();
        System.out.println("s:" + s);

        //String转换为StringBuilder
        String s1 = "world";
        //StringBuilder sb1 = s1;这样写也是错误的

        //public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
        StringBuilder sb1 = new StringBuilder(s1);
        System.out.println("s1:" + s1);
    }
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贰陆.256

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值