Day15-常用API
- String
1.1 概述
- java.lang.String : 字符串类,并且该类加 final修饰
-
底层就是char数组 private final char value[];
-
所以 字符串很多特性 就是数组的特性
-
1 字符串一旦创建不可更改
-
2 为了提升字符串的访问效率,Java中提出了字符串常量池,相当于是一个缓存区
-
引用类型对象应该保存在堆内存,但是字符串不同,保存在静态区的字符串常量池中
-
3 在程序的执行过程中,如果程序要用到某个字符串,如"abc",虚拟机会先去常量池中搜索,有没有这个字符串
-
如果已经有了,就直接指向该字符串即可,如果没有就新建一个字符串对象,并指向
1.2 基本使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012021554035.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1l6ajEyMzQ1NjEyNQ==,size_16,color_FFFFFF,t_70)
1.3 不要频繁拼接
1.4 构造方法
1.5 常用方法
!](https://img-blog.csdnimg.cn/20210120215559540.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1l6ajEyMzQ1NjEyNQ==,size_16,color_FFFFFF,t_70)
int length():返回字符串的长度: return value.length
char charAt(int index): 返回某索引处的字符return value[index]
boolean isEmpty():判断是否是空字符串:return value.length == 0
String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
String trim():返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大
小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex): 返回一个新的字符串, 它是此字符串的从
beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字 符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的
子字符串是否以指定前缀开始
boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列 时,返回 true
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出 现处的索引,从指定的索引开始
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后 一次出现处的索引,从指定的索引开始反向搜索
注:indexOf和lastIndexOf方法如果未找到都是返回-1
String replace(char oldChar, char newChar):返回一个新的字符串,它是
通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement): 使 用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement) : 使 用 给 定 的
replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement) : 使用给定的
replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此 字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中
- String常用方法
- 1 方法是谁的(这里肯定是String)
- 2 什么方法,静态还是成员,知道是什么方法,就知道应该如何调用
- 3 方法名是什么,入参和出参是什么
- 4 方法功能是什么
1.6 注意
- String 不可以任意拼接的字符串
-
String s2 = "a" + "b"; 这种写法,在编译阶段,就会把+ 去掉
-
"a" +"b" a和b都是字面量,需要在编译阶段说明临时空间,所以需要通过值确定类型
-
编译时看到是两个字符串相加,就直接把+省略,保存ab
-
所以 s1 ==s2 是true
-
String s3 = a + b;
-
a和b是变量,编译阶段是不确定变量的值的
-
在运行的时候,由于是两个字符串变量相加,
-
所以会自动创建一个StringBuffer对象,然后把两个变量拼接到一起,最终转换为String类型
-
而是以 return new String(value, 0, count); 所以 s3是指向堆内存的
- StringBuilder和StringBuffer
2.1 概述
- java.lang.StringBuffer
- java.lang.StringBuilder
- 1 StringBuffer和StringBuilder是什么?
-
是一个可变的字符串缓冲区
- 2 原理
-
预先在内存中申请一块空间,可以容纳字符序列(字符数组)
-
如果 预留空间不够,会进行自动扩容
-
底层都是char[] ,并且默认初始化容量是16个字符
- 3 String,StringBuffer,StringBuilder最大的区别
-
1 String不可变字符序列,而StringBuilder和StringBuffer是可变字符序列
-
2 StringBuffer是线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
-
3 StringBuilder是非线程安全,在多线程环境下可能出现问题,效率高,一般用于方法中
- 4 如何选择StringBuilder和StringBuffer
-
多线程环境下,是否有可能出现多个线程同时操作同一个数据 的可能(增,删,改)
2.2 常用方法
2.3 使用
- 包装类
3.1 概述
- 包装类 : 封装了基本类型的操作,更方便我们使用
-
byte -- java.lang.Byte
-
short -- java.lang.Short
-
int -- java.lang.Integer
-
long -- java.lang.Long
-
float -- java.lang.Float
-
double -- java.lang.Double
-
char -- java.lang.Character
-
boolean -- java.lang.Boolean
- 既然有了基本类型,为什么还要使用包装类呢?
-
1 方便
-
2 为了理论上的完整(面向对象)
- 问 : 想要创建一个方法,该方法可以接收任何类型
-
Object ,因为Object是所有类的祖类,由于多态的原因,可以接收任何对象
-
但是基本类型呢? 基本类型并不是Object的子类,怎么接收?
-
包装类 , 可以把基本类型转换为对应的包装类类型,而包装类也是个类,也是Object的子类
3.2 使用
3.3 Integer
3.3.1 基本使用
以Integer为例 讲解八种包装类
3.3.2 常用方法
3.3.3 类型转换
3.3.4 自动装箱和自动拆箱
- java1.5新特性
-
自动装箱
-
把 基本数据类型 自动转换为 对应的包装类
-
自动拆箱
-
把 包装类 自动转换为 基本数据类型
- 自动装箱和自动拆箱是编译时 完成的
3.3.5 扩展之整型常量池
大概意思是 : 这是一个缓存机制,如果值再-128到127之间,就不再创建新对象,而是直接把数组中的引用赋值给你
如果不再这个范围内,就创建 新的Integer对象
当这个内部类加载,会执行静态语句块,那么就会对这个缓存初始化赋值
共 256个Integer对象
-128,-127,-126,…126,127
0 1 2 …254 255