尚在更新中![ 包装类 and API篇 ] 基于B站韩顺平老师零基础Java教程的学习笔记 6

  • 写在最前面:本来本期应该还有Math类,Arrays类,Date类等内容…但是看这几章内容实在太困了…先跳过看集合了,预计五一假期前补完本文,也存在鸽了的可能性…

常用类

包装类

  • 针对八种基本数据类型相应的引用类型即为包装类

  • 有了类的特点,就可以调用类中的方法
    在这里插入图片描述

    在这里插入图片描述

包装类和基本数据的转换

  • 演示装箱
    在这里插入图片描述

String

基本介绍

  • String对象用于保存字符串,也就是一组字符序列

  • 字符串的字符使用Unicode字符编码,一个字符无论是汉字还是字母都占两个字节

  • String类有很多构造器

  • String实现了接口Serializable(String可以序列化,实现网络传输)

  • 实现了接口comparable(String可以相互比较大小)

  • String有属性 private final char value[],用于存放专门的字符,且被final修饰,是常量,不可修改内容可以修改,但地址不可修改,不能指向新的空间

  • 字符串是不可变的,一个字符串对象一旦被分配,其内容是不可变的

    • 比如:
      String s1 = "hello";
      s1 = "hi";
      //创建了两个对象
      
    • 此时千万不要认为是hi直接替换了hello,让s1=hi,那么它会找常量池中有没有hi,有则直接指向,没有就会重新创建,hello就没人指向丢失了
  • 创建String对象的两种方式:

    • 方式一:直接赋值String s = "alioooooon";
    • 先从常量池查看是否有"alioooooon"的数据空间,如果有直接指向,没有就重新创建然后指向,s最终指向的是常量池的空间地址
    • 方式二:调用构造器String s= new String(alioooooon);
      • 现在堆中创建控件,里面维护了value属性,指向常量池的aliooooon空间,如果常量池没有alioooon,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
        在这里插入图片描述
  • 字符串特性举例:

    String a = "hello";
    String b = "abc";
    String c = a + b;
    //如何执行?
    //一共有三个对象
    
    • c没有直接指向常量池中的"helloabc",它仍然是个字符串,最终是指向堆的
    • 如果此时加一个String d = "helloabc"那么d == cfalse,因为d直接指向常量池中的helloabc,但是c指向堆,二者地址显然不同
      在这里插入图片描述

    在这里插入图片描述

String类的常见方法

  • String类是保存字符串常量的,但效率较低,每次更新都要重新开辟空间。因此Java设计者提供了StringBuffer和StringBuilder来增强String的功能并提高效率

  • String类常见方法应用实例1

    1. equals//区分大小写,判断内容是否相等
    2. equalsIgnoreCase//忽略大小写的情况下判断内容是否相等
    3. length//获取字符的个数,字符串的长度
    4. indexOf//获取字符在字符串中第一次出现的索引,索引从零开始,如果找不到返回-1
    5. lastIndexOf//获取字符在字符串中最后一次出现的索引,索引从零开始,如果找不到返回-1
    6. substring//截取指定范围的子串
    • substring(5)->从索引x开始截取后面所有字串
    • substring(0,5)->从索引0开始截取,截取到索引为5-1=4的位置
    1. trim//去除前后空格
    2. charAt//获取某索引处的字符,注意不能使用Str[index]这种方式
    • 解释举例:
      String str = "alioon";
      //str[0] = ...这写法完全错误!!!
      //已知错误写法是吧str直接当作了数组,但实际上alioon是存在属性value中的
      str.chatAt(0);//正确写法 ==> 0
      
    1. compareTo//比较两个字符串的大小,如果前者大,返回正数,后者大返回负数,相等返回0
    2. toCharArray//转换成字符数组
    3. format//格式字符串,%s 字符串,%c 字符,%d 整型,%.2f 浮点型(会四舍五入处理)
    • %s,%d,%.2f,%c称为占位符
    • 这些占位符由后面的变量按顺序来替换
    1. split//分割字符串
    • 在这里插入图片描述
    1. replace//替换字符串中的字符s.replace(a,b)//把a换成b
    • 单纯使用s.replace没有任何影响,返回值才是替换过的
    1. concat//拼接字符串s.concat(hello).concat(alioooon)
    2. toUpperCase//字符串全部转换成大写s.toUpperCase()
    3. toLowerCase//字符串全部转换成小写s.toLowerCase()

StringBuffer

注:jdk8后char[]变为了byte[]

  • 基本介绍:
  • java.lang.StringBuffer代表可变的字符序列,可以对字符内容进行增删
  • StringBuffer长度可变,是一个容器
  • StringBuffer的父类AbstractStringBuilder中有属性char[],且不是final修饰的,该数组存放了字符串内容,因此存放在堆中

String VS StringBuffer

  • String保存的是字符串常量,值不可更改,每次String类的更新就是改变地址,效率较低,实质上是private final char value[]
  • StringBuffer保存的是字符串变量,值可以更改,每一次StringBuffer的更新实际上可以更新内容而不必更改地址,效率更高,实质上是char[]
  • 构造器解读:
    • 默认创建一个大小为16的char[],用于存放字符内容
    • 通过构造器指定char[]的大小
    • 通过 给一个String 创建StringBuffer(也就是赋初值)

String 和 StringBuffer的转换

在这里插入图片描述

tips:append就是将字符串加在末尾

在这里插入图片描述

StringBuffer类的常用方法

tips:主要高频使用append 和 insert 方法

  • append//增(追加)使用方法:s.append(增的内容)
  • delete//删 使用方法:s.delete(11,14):意为删除***[11,14)***的字符,注意这里不包含14
    在这里插入图片描述
    在这里插入图片描述

StringBuilder

  • 基本介绍:
  • 一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步(不是线程安全的)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候,如果可能,建议优先使用StringBuilder,因为在大多数实现中,StringBuilder比StringBuffer更快
  • 在StringBuilder上的主要操作是append和insert方法,可以重载这些方法以接受任意类型的数据
  • 实现了Serializable,说明StringBuilder对象可以串行化(可以进行网络传输,保存到文件)
  • StringBuilder类是final类不可被继承
  • StringBuilder对象字符序列依然是存放在其父类的char[] value,因此字符序列是在堆中
  • StringBuilder的方法没有做互斥处理,没有synchronized关键字。因此在**单线程(没有并发)**的情况下使用StringBuilder

String VS StringBuilder VS StringBuffer

在这里插入图片描述

  • 效率:StringBuilder > StringBuffer > String
  • 总结使用原则
    • 如果字符串存在大量的修改操作,一般使用StringBuilder和StringBuffer
    • 如果字符串存在大量的修改操作,并在单线程的情况下,一般使用StringBuilder
    • 如果字符串存在大量的修改操作,并在多线程的情况下,一般使用StringBuffer
    • 如果字符串很少修改,被多个对象引用,使用String,比如配置信息等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值