String、StringBuffer、StringBuilder介绍

String、StringBuffer、StringBuilde

1.String类

1.八点注意事项
在这里插入图片描述
特别是第八点:
在这里插入图片描述
2.两种创建String对象的区别
在这里插入图片描述
在这里插入图片描述

        String a = "wcw";
        String b = "wcw";
        System.out.println(a == b);
    //结果为true,这是通过方式一创建,返回的地址一样

练习:
在这里插入图片描述
在这里插入图片描述
3.字符串String对象特性

小结:对于两个变量相加,底层是StringBuijder sb = new StringBuilder(); sb.append(a); sb.append(b);sb是在堆中,并且append是在原来字符串的基础上追加的。

重要规则:String c = “ab” + “cd”,常量相加,看的是池。String c = a + b,变量相加,是在堆中。
在这里插入图片描述
练习题
在这里插入图片描述

package com.enum_;

/**
 * Created on 2021/6/18.
 *
 * @author Ryan_小王
 */
public class Test {
    String str = new String("wcw");
    final char[] ch = {'j', 'a', 'v', 'a'};
    public void change(String str, char ch[]) {
        str = "java";
        ch[0] = 'h';
    }
    public static void main(String[] args) {
        Test ex = new Test();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and ");
        System.out.println(ex.ch);
    }
}
//结果:wcw and hava

在这里插入图片描述
注意:每一个String对象都有一个字符数组value存放字符串。字符数组的数据放在堆中,final类型的数组可以改变数据但是不能改变地址。例中str和ch为类的属性放在堆中,ex为对象实例放在栈中,change传入的实参首先初始化后局部变量str也是指向ex对象str的value数组,走完程序内部内容后局部变量str指向常量池的java,并没有改变对象实例ex的str。

4.String常用类
在这里插入图片描述
在这里插入图片描述
方法compareTo演示

//(1)如果长度相同,并且每个字符也相同,则返回0
        //(2)如果长度相同或者不相同,但是在进行比较时,可以区分大小,
        //   就返回if (c1 != c2) {
        //            return c1 - c2;
        //        }
        //(3)如果前面的部分相同,就返回s1.len - s2,len
        String s1 = "wcd";
        String s2 = "wcaw";
        System.out.println(s1.compareTo(s2));

方法format演示:

 		String name = "小王";
        int age = 23;
        double score = 98.3;
        char gender = '男';
        //将所有信息拼接在一个字符串
        String info = "我的姓名是" + name + "年龄" + age + "分数" + score + "性别" + gender;
        System.out.println(info);
        String info1 = String.format("我的名字是%s年龄是%d,成绩是%.2f,性别是%c",name,age,score,gender);
        System.out.println(info1);

2.StringBuffer类

变长的,若char[]容量不足则会新开辟一个容量大的字符数组,并不会改变对象的地址。
在这里插入图片描述
在这里插入图片描述

1.String和StringBuffer类对比
在这里插入图片描述
2.StringBuffer构造器
默认无参构造器为一个大小为16的char[],若传入字符串,则char[]的大小为str.length() + 16。
在这里插入图片描述
3.String和StringBuffer的转换

//String-->StringBuffer
String str = "hello";
//方式1 使用构造器
//注意:返回的才是StringBuffer对象,堆str本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);

//StringBuffer-->String
StringBuffer stringBuffer2 = new StringBuffer("wcw");
//方式1 使用StringBuffer提供的toString方法
String s = stringBuffer2.toString();
//方式2 使用构造器来确定
String s0 = new String(stringBuffer);

4.StringBuffer类常见方法
在这里插入图片描述
5.StringBuffer练习

String str = null;
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(str); //底层源码调用的AbstractStringBuilder的appendNULL
System.out.println(stringBuffer.length()); //4

System.out.println(stringBuffer); //null
StringBuffer stringBuffer1 = new StringBuffer(str); //底层 super(str.length + 16),空指针异常
System.out.println(stringBuffer1); 

3.StringBuilder类

1.基本介绍
StringBuilder不是线程安全的,方法都没有synchronized关键字,可在单线程中使用,比StringBuffer快。
在这里插入图片描述
在这里插入图片描述
2.String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder三者的比较:
在这里插入图片描述
String、StringBuffer、StringBuilder三者的选择:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值