首页 > 其他分享 >Day29:StringBuilder详解

Day29:StringBuilder详解

时间:2022-12-02 21:34:02浏览次数:35  
标签:Day29 String 对象 StringBuilder 详解 println sb public

StringBuilder

1.1 StringBuilder概述

我们先对普通的String字符串对象建立进行内存分析;

public class Demo{
    public static void main(String[] args){
        String a="hello;
        s+="world";
    System.out.println(s);  
    }

}

首先在栈内存中加载main方法,

然后来到String a="hello;此时堆内存中的常量池中会创建一个对象且存放着hello,地址为001;栈内存中则存放着变量a,实则为地址001,并指向001对象;

程序来到s+="world";因为worldString类型且并不存在,所以在常量池中会新建一个空间来存放对象world,地址为002

s+="world"等于s=s+"world"=helloworld;于是又有一个新的对象helloworld产生,地址为003;

最后来到输出语句,输出s,s的指向为003,于是输出helloworld

main方法执行完毕,弹栈消失。


String类型的数据存放在堆内存中的常量池,为常量;为常量则不可更改;

所以每一个String类型的数据的增加都会在常量池生成一个对象;

也就是说如果我们对字符串进行拼接操作,每次拼接,都会产生一个新的String对象,会浪费我们的内存空间,上面的字符串拼接创建了三个对象,最终我们使用的仅为一个;为了解决这种 现象,Java提供了一种类为StringBuilder

StringBuilder是一个可变的字符串类,即其对象的内容是可变的;在进行字符串拼接时是不会产生新的对象的。


1.2 StringStringBuilder的区别

  • String:对象内容是不可变的
  • StringBuilder:对象内容是可变的

1.3 StringBuilder的构造方法

方法名 说明
public Stringbuilder (){}; 无参构造方法;调用时对象内容为空
public Stringbuilder (String s){}; 有参构造方法;调用时对象内容为传递的实参值
public class StringbuilderDemo{
    public static void main(String[] args){
     //public Stringbuilder (){};调用无参构造,对象内容为空
    Stringbuilder st=new Stringbuilder();
    System.out.println(st);//没有任何输出
    // 我们来输出他的字符长度
    System。out.println(st.length());//0   这里需要注意一下  数组的长度方法引用是不需要加括号的;字符串的长度方法的引用是需要加上括号的
     //public Stringbuilder (){};调用无参构造,对象内容为空
    Stringbuilder st1=new Stringbuilder("工地佬");
    System.out.println(st1);//输出 工地佬 
    System。out.println(st1.length()); 
    }
}

1.4 StringBuilder的添加和反转方法

方法名 说明
public StringBuilder append(任意类型数据) 参数可以添加任意数据,且返回值为调用者对象本身
public StringBuilder reverse() 将调用者对象字符串反转后返回
//StringBuilder添加
public class Test{
    public static void main(String[] args){
        StringBuilder sb=new StringBuilder();//此时sb为空值对象
        sb.append("工地佬");//调用添加方法
        //因为StringBuilder类字符串内容可变,不会创建新的对象,直接在sb所指引的堆内存中添加字符串"工地佬";
        System.out.println(sb);//工地佬
    }
}
//StringBuilder反转
public class Test{
    public static void main(String[] args){
        StringBuilder sb=new StringBuilder("工地佬");
        // sb.reverse();此方法返回的是一个字符串对象且为自身对象sb;我们无需在定义变量接收,直接控制台输出即可
        System.out.println(sb.reverse());//佬地工
        System.out.println(sb.reverse());//工地佬  再次反转
    }
}
//链式编程
public class Test{
    public static void main(String[] args){
        StringBuilder sb=new StringBuilder();
        sb.append("工地佬");
        sb.append("工地佬").append("是").append("牛马");
        //因为append方法返回的是对象,所以我们可以继续调用方法,形成了链式编程
        System.out.println(sb);//工地佬
    }
}

1.5 StringBuilder和String相互转换

为什么我们会用到StringBuilderString相互转换呢?因为我们会用到StringBuilder的两种方法,而String没有,所以我们先将String转换为StringBuilder类型,当方法使用完后再转换回去。

  • StringBuilder转为String

通过调用toString方法即可实现

  • String转为StringBuilder

通过StringBuilder的构造方法即可实现;也就是将String对象作为参数

//StringBuilder转为String
public class Change{
    public static void main(String[] args){
        String s="工地佬";
        StringBuilder sb=new StringBuilder(s);//String对象作为StringBuilder构造器参数实现转换
        sb.append("是牛马");
        System.out.println(sb.toString());//调用toString方法实现转换
        
    }
}

标签:Day29,String,对象,StringBuilder,详解,println,sb,public
From: https://www.cnblogs.com/CQliuwei/p/16945676.html

相关文章

  • asp教程:ASP开发中存储过程应用详解
    ASP开发中存储过程应用详解|调用,参数,存储,数据库,输出,编译,mycomm,输入,userid,代码ASP与存储过程(StoredProcedures)的文章不少,但是我怀疑作者们是否真正实践过。......
  • Python+NumPy绘制常见曲线的方法详解_python
    一、利萨茹曲线二、计算斐波那契数列 三、方波方波可以近似表示为多个正弦波的叠加。任意一个方波信号都可以用无穷傅里叶级数来表示。需要累加很多项级数,且级数越......
  • day29-JQuery02
    JQuery024.jQuery选择器024.3过滤选择器4.3.1基础过滤选择器$("li:first")//第一个li$("li:last")//最后一个li$("li:even")//挑选下标为偶数的li$("......
  • __call__函数详解
    来自  https://blog.csdn.net/weixin_43702920/article/details/107832807   传送门__call__(self,) 该方法的功能类似于在类中重载() 运算符,使得类实例对......
  • vmware虚拟机三种网络模式(桥接、NAT、仅主机)带图详解
    文章目录说明三种网络模式介绍Bridge桥接模式说明设置vmware网络适配器虚拟机网络修改为桥接模式查看桥接物理网卡IP信息虚拟机中配置ip特殊说明NAT网络地址转换说明设置......
  • 回顾一下bert-bert详解
    1、Bert(encoderoftransformer)BERT全称为BidirectionalEncoderRepresentationfromTransformer,是Google以无监督的方式利用大量无标注文本「炼成」的语言模型,其架......
  • VUE $refs 与 $el 详解
    $refs与$el是什么?作用是什么?ref,$refs,$el,三者之间的关系是什么?ref(给元素或者子组件注册引用信息)就像你要给元素设置样式,就需要先给元素设定一个class一样,同理......
  • 【Django】Django model中的 class Meta 详解
     Model元数据就是"不是一个字段的任何数据"--比如排序选项,admin选项等等.下面是所有可能用到的Meta选项.没有一个选项是必需的.是否添加classMeta到你......
  • OpenCV4之C++入门详解
    OpenCV4之C++入门详解1、VisualStudio安装及环境配置与搭建1.下载地址:https://my.visualstudio.com/Downloads?q=Visual,下载后按照说明安装即可登录账号下载即可,建议下......
  • Java方法详解
    何为方法Java方法是语句的集合,他们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计......