String、StringBuffer类详解笔记

String类

String类的特点

1、字符串一旦创建就不可能再改变
2、为提升字符串的访问效率,在程序中使用了“缓存”技术,即字符串常量池
3、如果使用到某个字符串,会先去字符串常量池中寻找对应字符串,如果没有找到就在常量池中创建一个新的字符串
4、String类重写了toString(),equals(),hashcode()方法。
并保证equals()方法相同时,hashcode()方法一定相同。

String创建对象的两种方式

1、String s= new String(“String”);
1)在堆区创建一个字符串对象
2)在方法区字符串常量池创建一个字符串对象 (如果常量池中本身就有,不用创建直接获取)
2、String s=“String”;
直接在方法区的字符串常量池中创建一个字符串对象,可以被共享

String类的构造方法

在这里插入图片描述

String类的常用方法

创建新的字符串:
concat:字符串的附加
replace、replaceAll:字符串的替换
substring:求子串
toLowerCase:转换成小写
toUpperCase:转换成大写
trim:把字符串首尾空格删除
split:把原来的字符串分割为几个字串

StringBuffer类

StringBuffer类的特点

在这里插入图片描述

StringBuffer类创建对象

在这里插入图片描述

StringBuffer类中的常用方法

概念理解:
在这里插入图片描述
代码实操:

StringBuffer s1=new StringBuffer("abcd1234!?,;");
        StringBuffer s2=new StringBuffer("987654321987654");
        StringBuffer s3=new StringBuffer("987654321");
        System.out.println("↓↓↓StringBuffer类的一些常用方法如下↓↓↓");
        System.out.println("-----------------------------------------------------");
        System.out.println("字符串s1的长度为:" + s1.length());//返回字符串的实际长度
        System.out.println("-----------------------------------------------------");
        System.out.println("字符串s1所占容器的大小为:" + s1.capacity());//返回字符串所占容器的总大小
        System.out.println("-----------------------------------------------------");
        System.out.println("获取字符串s1中下标是2的位置的字符:" + s1.charAt(2));
        System.out.println("-----------------------------------------------------");
        System.out.println("子字符串'654'第一次出现在字符串s2中的索引为:" + s2.indexOf("654"));
        System.out.println("从指定的索引6开始搜索,返回子字符串'654'第一次出现在字符串s2中的索引:" + s2.indexOf("654",6));
        System.out.println("-----------------------------------------------------");
        System.out.println("子字符串'987'最后一次出现在字符串s2中的索引为:" + s2.lastIndexOf("987"));
        System.out.println("从指定的索引5开始反向搜索,返回字符串'87'在字符串s2中最后一次出现的索引:" + s2.lastIndexOf("87",5));
        System.out.println("-----------------------------------------------------");
        s1.append('x');//在字符串s1的末尾添加字符'c'
        s1.append("Java");//在字符串s1的末尾添加字符串"Java"
        System.out.println("修改后的字符串s1为:" + s1);
        System.out.println("-----------------------------------------------------");
        s1.insert(4,"abcd");//在第4个位置插入字符串"abcd"
        System.out.println("修改后的字符串s1为:" + s1);
        System.out.println("-----------------------------------------------------");
        s1.deleteCharAt(1);//删除字符串s1中第一个位置的字符
        s1.delete(2,5);//删除字符串s1中第2到第4个位置的字符
        System.out.println("修改后的字符串s1为:" + s1);
        System.out.println("-----------------------------------------------------");
        s1.replace(4,8,"5678");//将字符串s1中第4到第7个位置的字符串修改为"5678"
        System.out.println("修改后的字符串s1为:" + s1);
        System.out.println("-----------------------------------------------------");
        s1.setCharAt(1,'b');//将字符串s1中第一个位置的字符修改为'b'
        System.out.println("修改后的字符串s1为:" + s1);
        System.out.println("-----------------------------------------------------");
        s2.reverse();//将字符串s2反转
        System.out.println("修改后的字符串s2为:" + s2);
        System.out.println("-----------------------------------------------------");
        System.out.println("截取字符串s1从第4个位置开始到结尾:" + s1.substring(4));
        System.out.println("-----------------------------------------------------");
        System.out.println("截取字符串s1从第4个位置开始到第7个位置结尾:" + s1.substring(4,8));
        System.out.println("-----------------------------------------------------");
        System.out.println("获取s1的变量类型:" + s1.getClass().getName());
        System.out.println("将对象信息转化为字符串:" + s2.toString());
↓↓↓StringBuffer类的一些常用方法如下↓↓↓
-----------------------------------------------------
字符串s1的长度为:12
-----------------------------------------------------
字符串s1所占容器的大小为:28
-----------------------------------------------------
获取字符串s1中下标是2的位置的字符:c
-----------------------------------------------------
子字符串'654'第一次出现在字符串s2中的索引为:3
从指定的索引6开始搜索,返回子字符串'654'第一次出现在字符串s2中的索引:12
-----------------------------------------------------
子字符串'987'最后一次出现在字符串s2中的索引为:9
从指定的索引5开始反向搜索,返回字符串'87'在字符串s2中最后一次出现的索引:1
-----------------------------------------------------
修改后的字符串s1为:abcd1234!?,;xJava
-----------------------------------------------------
修改后的字符串s1为:abcdabcd1234!?,;xJava
-----------------------------------------------------
修改后的字符串s1为:accd1234!?,;xJava
-----------------------------------------------------
修改后的字符串s1为:accd5678!?,;xJava
-----------------------------------------------------
修改后的字符串s1为:abcd5678!?,;xJava
-----------------------------------------------------
修改后的字符串s2为:456789123456789
-----------------------------------------------------
截取字符串s1从第4个位置开始到结尾:5678!?,;xJava
-----------------------------------------------------
截取字符串s1从第4个位置开始到第7个位置结尾:5678
-----------------------------------------------------
获取s1的变量类型:java.lang.StringBuffer
将对象信息转化为字符串:456789123456789

String和StringBuffer类的比较

相同点:
1、都是用来处理字符串
2、都提供了length(),charAt()和subString()方法,且用法相同
不同点:
1、StringBuffer类创建的对象是可以改变的,通过改变其缓冲区的方法不会创建新的对象(如果空间不够可自动扩容)
StringBuffer自动扩容原理:如果新添加字符串(当然,append方法是重载的,添加其他类型的数据也可以,此处以字符串为例),导致原始的容量不够用,就会先进性扩容。
扩容的规则是:先 原始容量*2 + 2
1)、如果扩容了之后,容量够用,新的容量就为扩容之后的容量。
2)、如果扩容了之后,容量不够用,新的容量就是所需要的容量,即原始字符串长度加上新添加的字符串长度。
扩容完成之后,将原始数组复制到新的容量中,然后将新的字符串添加进去
在这里插入图片描述
在这里插入图片描述
2、 StringBuffer类没有覆盖equals()方法
3、 StringBuffer类不支持“+”连接运算
4、StringBuffer类覆盖toString()方法,但和String类覆盖 toString()方法实现方式不同


**String、Date、File、包装类等都重写了Object类中的toString()方法。使得在调用对象的toString()时,返回"实体内容"信息**


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值