Java学习day16--StringBuilder与StringBuffer、枚举

一、String, StringBuilder,StringBuffer 的区别
  • 相同点:都表示字符串,字符序列

  • 不同点:

  • 是否可变:

String:不可变字符串

StringBuilder:可变字符序列

StringBuffer:可变字符序列

  • 线程安全|同步:

StringBuilder:线程不安全|不同步

StringBuffer:线程安全|同步

执行效率:StringBuilder > StringBuffer > String

  • StringBuilder:一个可变的字符序列,此类提供与StringBuffer兼容的API,但不保证同步,在可能情况下,建议使用此类优先于StringBuilder类,因为它支持所有的相同的操作,但速度更快,因为它不支持同步。

  • StringBuffer:线程安全,可变字符序列,可供多个线程使用

tips:从JDK 5版本开始,这个类已经补充了一个设计用于单个线程的等效类, StringBuilder 。 通常应优先使用StringBuilder类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

  • 底层结构:

来自共同的父类:AbstractStringBuilder

jdk8之前:char[] value;

jdk11:byte[] value;

初始容量:16 | 可通过构造器指定

//StringBuilder() 构造一个字符串构建器,其中不包含任何字符,初始容量为16个字符。
        StringBuilder s1 = new StringBuilder();
        System.out.println(s1.length());//0
        System.out.println(s1.capacity());//16

//StringBuilder(int capacity) 构造一个字符串构建器,其中没有字符,并且具有 capacity参数指定的初始容量。
        StringBuilder s2 = new StringBuilder(20);
        System.out.println(s2.length());//0
        System.out.println(s2.capacity());//20
//StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。
        StringBuilder s3 = new StringBuilder("abc");
        System.out.println(s3.length());//3
        System.out.println(s3.capacity());//19
  • 追加 StringBuilder append(boolean b) 将 boolean参数的字符串表示形式追加到序列中。

s3.append(false);
  • StringBuilder delete(int start, int end) 删除此序列的子字符串中的字符。(start包括开始索引,但不包括最后的索引位置end)

s3.delete(1,2);
  • StringBuilder insert(int offset, double d) 将 double参数的字符串表示形式插入此序列中。

s3.insert(2, 3.0);//在索引为二的位置插入3.0进去
  • StringBuilder reverse() 导致此字符序列被序列的反向替换。

s3.reverse();//如果s3此时为"abc",则转换后s3为"cba"
  • StringBuilder,StringBuffer-->String

StringBuilder s = new StringBuilder("abc");
String ss = new String(s);
  • String-->StringBuilder,StringBuffer

String s5 = "abcd";
StringBuilder s6 = new StringBuilder(s5);
二、特殊类型:枚举类型

确定一种事物的所有可能|实例

枚举是一种特殊的类型,定义特殊,特点特殊,使用特殊

使用 enum 声明的类型:

enum{

    }

枚举类型的实例是由枚举类内部提供,不允许外部创建,只能获取使用-->所以枚举类默认构造器是private修饰

枚举中的字段为当前枚举类型的实例,相当于省略了public static final修饰

枚举类构造器默认修饰符为private

枚举类中可以定义字段、属性、构造器、方法...

枚举类型的使用:通过枚举名 . 实例名 获取对象,通过对象调用成员

枚举类型默认隐式的继承java.lang.Enum 这是所有Java语言枚举类型的公共基类

public class EnumTest {
    public static void main(String[] args) {
        Wkday wkday1 = Wkday.D3;
        System.out.println(wkday1.getName());//null
        Wkday wkday2 = Wkday.D4;
        System.out.println(wkday2.getName());

        //switch可匹配的参数类型 : byte short int char 1.5增加枚举类型  1.7增加String
        switch (wkday2){
            case D3:
                System.out.println("今天是"+wkday1.getName());
            case D4:
                System.out.println("今天是"+wkday2.getName());

        }
        //int ordinal() 返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。
        int num  = wkday1.ordinal();
        System.out.println(num);

//请注意,对于特定的枚举类型T ,可以使用该枚举上隐式声明的public static T valueOf(String)方法代替此方法从名称映射到相应的枚举常量。
// 可以通过调用该类型的隐式public static T[] values()方法来获取枚举类型的所有常量。
        Wkday[] arrs = Wkday.values();//枚举常量存入数组
        System.out.println(Arrays.toString(arrs));


    }
}

//枚举类型
enum Wkday {
    //实例
    D1, D2, D3, D4("周四"), D5, D6, D7;

    //属性
    private String name;

    //构造器,默认被private修饰
    private Wkday() {

    }

    private Wkday(String name) {
        this.name = name;
    }

    //成员方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void test() {}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值