本章目录
StringBuffer 类
StringBuffer 是一个线程安全的可变字符序列。它继承于 AbstractStringBuilder,实现了 CharSequence 接口。
StringBuilder 也是 AbstractStringBuilder 的子类,与 StringBuffer 不同的是,StringBuilder 是线程不安全的。
1、StringBuffer 源码分析
1.1、成员变量
//StringBuffer 的底层实现
private transient char[] toStringCache;
//序列化 ID,用于序列化机制
static final long serialVersionUID = 3388685877147921107L;
从源码可以看出,StringBuffer 的底层实现是 char 数组,与 String 不同的是,StringBuffer 底层使用的 char 数组没有被 final 修饰,这说明 StringBuffer 是可以改变的。
1.2、构造方法
//构造一个不带字符的字符串缓冲区,初始容量为 16 个字符
public StringBuffer() {
super(16);
}
//构造一个不带字符,但具有指定初始容量的字符串缓冲区
public StringBuffer(int capacity) {
super(capacity);
}
//构造一个字符串缓冲区,初始容量为16加字符串长度,并将其内容初始化为指定字符串内容
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
//构造一个字符串缓冲区,初始容量为16加seq长度,并包含 seq 中的字符
public StringBuffer(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
2、StringBuffer 常用的方法
2.1、获取功能
StringBuffer 创建的对象可以理解为一个容器,它有容积和长度,容积指最大容纳多少内容,长度指容器中所存字符序列的长度。
2.1.1、capacity()
获取容器的容积
StringBuffer stringBuffer = new StringBuffer();
int capacity = stringBuffer.capacity(); //16
2.1.2、length()
获取容器中所存字符序列的长度
StringBuffer stringBuffer = new StringBuffer();
int length = stringBuffer.length(); //0
2.2、添加功能
2.2.1、append(Object obj)
将任意类型的数据添加到字符串缓冲区中,返回值为字符串缓冲区本身。虽然命名不同,但都是同一个字符串缓冲区。
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append(1);
StringBuffer stringBuffer2 = stringBuffer1.append('c');
StringBuffer stringBuffer3 = stringBuffer2.append(false);
System.out.println(stringBuffer3); //1cfalse
2.2.2、insert(int offset,Object obj)
在字符串缓冲区的指定长度后(长度从 1 开始),添加任意类型的数据,返回值为字符串缓冲区本身。
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append(1);
StringBuffer stringBuffer2 = stringBuffer1.append('c');
StringBuffer stringBuffer3 = stringBuffer2.append(false);
StringBuffer stringBuffer4 = stringBuffer3.insert(1, "java");
System.out.println(stringBuffer4); //1javacfalse
2.3、删除功能
2.3.1、deleteCharAt(int index)
删除指定索引处的字符,索引从 0 开始。
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append("123456");
StringBuffer stringBuffer2 = stringBuffer1.deleteCharAt(0);
System.out.println(stringBuffer2); //23456
2.3.2、delete(int start,int end)
删除两索引之间的字符,包括 start 索引处字符,不包括 end 索引处字符
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append("123456");
StringBuffer delete = stringBuffer1.delete(3,5);
System.out.println(delete); //1236
2.4、截取功能
截取功能返回值是一个字符串,不再是字符缓冲区。
2.4.1、substring(int start)
从指定索引处截取至末尾,包括索引处字符。
StringBuffer stringBuffer = new StringBuffer("hello,world");
String substring = stringBuffer.substring(1);
System.out.println(substring); //ello,world
2.4.2、substring(int start,int end)
截取两索引之间的字符,包括起始索引处字符,不包括结束索引处字符。
StringBuffer stringBuffer = new StringBuffer("hello,world");
String substring = stringBuffer.substring(1, 4);
System.out.println(substring); //ell
2.5、替换和反转
2.5.1、replace(int start,int end,String str)
使用 str 替换两索引之间的字符序列,包括起始索引处字符,不包括结束索引处字符。
StringBuffer stringBuffer = new StringBuffer("hello,world");
StringBuffer java = stringBuffer.replace(1, 4, "javasese");
System.out.println(java); //hjavaseseo,world
2.5.2、reverse()
将字符序列反转。
StringBuffer stringBuffer = new StringBuffer("hello,world");
StringBuffer reverse = stringBuffer.reverse();
System.out.println(reverse); //dlrow,olleh
2.6、String 和 StringBuffer 的转换
2.6.1、String 转 StringBuffer
通过构造方法
String str = "hello";
StringBuffer stringBuffer = new StringBuffer(str);
通过 append() 方法
String str = "hello";
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append(str);
2.6.2、StringBuffer 转 String
通过 substring() 方法
StringBuffer stringBuffer1 = new StringBuffer("world");
String substring = stringBuffer1.substring(0);
通过构造方法
StringBuffer stringBuffer1 = new StringBuffer("world");
String s = new String(stringBuffer1);
通过 toString() 方法
StringBuffer stringBuffer1 = new StringBuffer("world");
String s = stringBuffer1.toString();
Arrays 类
此类包含用来操作数组的(比如搜索和排序)的各种方法。
除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullpointerException。
1、Arrays 类常用方法
Arrays 类中的方法都是 static 方法,通过Arrays.
直接调用即可。
1.1、toString(int[] a)
将一个整型数字转为字符串。
int[] ints = {1, 2, 3, 4};
String s = Arrays.toString(ints);
System.out.println(s); //[1, 2, 3, 4]
1.2、sort(int[] a)
将一个整型数组从小到大排序。
int[] ints1 = {8, 2, 4, 3, 7, 9, 4};
Arrays.sort(ints1);
System.out.println(Arrays.toString(ints1)); //[2, 3, 4, 4, 7, 8, 9]
1.3、binarySearch(int[] a,int key)
使用二分查找,返回所查数的索引。
int[] ints2 = {8, 2, 4, 9, 3, 7, 4};
int i = Arrays.binarySearch(ints2, 9);
System.out.println(i); //3
1.4、equals(int[] a, int[] a2)
比较两个数组中的元素是否相同。
int[] ints = {1, 2, 3};
int[] ints1 = {1, 2, 3};
boolean equals = Arrays.equals(ints, ints1);
System.out.println(equals); //true
1.5、int[] copyOf(int[] original, int newLength)
复制数组至新数组,newLength 创建的新数组的长度。
int[] ints = {1, 2, 3};
int[] ints2 = Arrays.copyOf(ints, 8);
System.out.println(Arrays.toString(ints2)); //[1, 2, 3, 0, 0, 0, 0, 0]
包装类
1、包装类概述
Java 是一门面向对象的语言,但 Java 中的基本数据类型却不是面向对象的,因为他们没有成员变量和成员方法。所以,Java 就对每种基本数据类型设计了对应的类,即包装类。
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包装类的特点:
- 所有的包装类都是 final 类型,所以不能创建他们的子类。
- 一个包装类的对象自创建以后,它所包含的基本数据类型就不能被改变。
2、装箱和拆箱
装箱:将基本数据类型变为包装类对象。
拆箱:将包装类对象变为基本数据类型。
包装类 | 装箱 | 拆箱 |
---|---|---|
Byte | valueOf() | byteValue() |
Short | valueOf() | shortValue() |
Integer | valueOf() | intValue() |
Long | valueOf() | longValue() |
Float | valueOf() | floatValue() |
Double | valueOf() | doubleValue() |
Character | valueOf() | charValue() |
Boolean | valueOf() | booleanValue() |
2、Integer 类举例
Integer 类在对象中包含了一个基本类型的 int 值。
构造方法:
public Integer(int value)
public Integer(String s)
2.1、int 转 Integer
2.1.1、通过 Integer 类的构造方法
Integer integer = new Integer(10);
//注意:使用此方法时,字符串内的参数必须由数字组成,否则会抛出 NumberFormatException
Integer integer1 = new Integer("10");
2.1.2、Integer.valueOf()
int i = 10;
Integer integer = Integer.valueOf(i);
2.1.3、自动装箱
事实上,编译器自动会执行 valueOf() 方法。
Integer i = 10; //Integer i = Integer.valueOf(10);
2.2、Integer 转 int
2.2.1、通过包装类的 intValue() 方法
Integer integer = Integer.valueOf(10);
int i = integer.intValue();
2.2.2、自动拆箱
编译器自动执行了 intValue() 方法。
Integer integer = new Integer(10);
int i = integer; //int i = integer.intValue()
2.3、int 和 String 之间的转换
2.3.1、int 转 String
用 “” 拼接。
int i = 10;
String s = i + "";
String 类的 valueOf(int i) 方法。
int i = 10;
String s = String.valueOf(i);
int 转 Integer 转 String。
Integer integer = new Integer(4);
String s2 = integer.toString();
Integer 类的 toString(int i) 方法。
int i = 10;
String s = Integer.toString(i);
2.3.2、String 转 int
Integer 类的 paseInt(String str) 方法。
String str = "1234";
int i = Integer.parseInt(str);
String 转 Integer 转 int。
String str = "1234";
Integer integer1 = Integer.valueOf(str);
int i = integer1.intValue();
喜欢是两手空空是眼眶红红是蠢蠢欲动是来势汹汹是似懂非懂是风吹草动都让我心事重重.
本章就到这里啦,各位看官,我们下篇再见~ (∩_∩)~~
-Czx.