StringBuffer
- 线程安全的可变字符序列。一个类似于String的字符缓冲区,但不能修改。
- StringBuffer和String的区别
- String是一个不可变的字符序列
- StringBuffer是一个可变的字符序列
- StringBuffer类的构造方法
- public StringBuffer():无参构造方法
- public StringBuffer(int capacity):指定容量的字符串缓冲区对象
- public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer sb=new StringBuffer();
System.out.println(sb.length());//容器中的字符个数,实际值
System.out.println(sb.capacity());//容器的初始容量,理论值
StringBuffer sb2=new StringBuffer(10);
System.out.println(sb2.length());//容器中的字符个数,实际值
System.out.println(sb2.capacity());//容器的初始容量,理论值
StringBuffer sb3=new StringBuffer("heima");
System.out.println(sb3.length());//容器中的字符个数,实际值
System.out.println(sb3.capacity());//容器的初始容量,理论值 字符串的length + 初始容量
- StringBuffer的添加功能
- public StringBuffer append(String str):
- 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
- public StringBuffer insert(int offset,String str):
- 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
- 如果没有指定位置的索引,就会报索引越界异常
- StringBuffer是字符串缓冲区,当NEW的时候是在堆内创建一个对象,底层让那个是一个长度为16的字符数组当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
- public StringBuffer append(String str):
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append(true);
StringBuffer sb3 = sb.append("heima");
StringBuffer sb4 = sb.append(100);
System.out.println(sb.toString());//trueheima100
System.out.println(sb2.toString());//trueheima100
System.out.println(sb3.toString());//trueheima100
System.out.println(sb4.toString());//trueheima100
StringBuffer sb = new StringBuffer("1234");
sb.insert(3,"heima");
System.out.println(sb);//123heima4
- StringBuffer的删除功能
- public StringBuffer deleteCharAt(int index):
- 删除指定位置的字符,并返回本身
- public StringBuffer delete(int start,int end):
- 删除从指定位置开始指定位置结束的内容,并返回本身
- public StringBuffer deleteCharAt(int index):
StringBuffer sb = new StringBuffer();
sb.append("heima");
sb.deleteCharAt(4);
System.out.println(sb);//heim
sb.delete(0, 2);//删除的时候包含的是头不包含尾
System.out.println(sb);//im
- StringBuffer的替换和反转功能
- A:StringBuffer的替换功能
- public StringBuffer replace(int start,int end,String str):
- 从start开始到end用str替换
- public StringBuffer replace(int start,int end,String str):
StringBuffer sb = new StringBuffer("heima");
sb.replace(0, 3, "bai");//替换
System.out.println(sb);//baima
- B:StringBuffer的反转功能
- public StringBuffer reverse():
- 字符串反转
- public StringBuffer reverse():
StringBuffer sb = new StringBuffer("heima");
sb.replace(0, 3, "bai");//替换
System.out.println(sb);//baima
sb.reverse();
System.out.println(sb);//amiab
- StringBuffer的截取功能
- 注意返回值类型不再是StringBuffer,而是String
- public String substring(int start):
- 从指定位置截取到末尾
- public String substring(int start,int end):
- 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
StringBuffer sb = new StringBuffer("woaiheima");
String str = sb.substring(4);
String str2 = sb.substring(4, 7);
System.out.println(sb);//woaiheima
System.out.println(str2);//heima
System.out.println(str);//hei
- StringBuffer和String的相互转换
//将string转换成stringbuffer
StringBuffer sb1 = new StringBuffer("heima");
System.out.println(sb1);
StringBuffer sb2 = new StringBuffer();
sb2.append("heima");
System.out.println(sb2);
//将StringBuffer转换成String
StringBuffer sb = new StringBuffer("heima");
String s1 = new String(sb);
System.out.println(s1);
System.out.println(sb.toString());
- StringBuffer和StringBuilder的区别
- 两个内的方法都是一样的。
- StringBuffer是JDK1.0版本,是线程安全的,效率低
- StringBuilder是JDK1.5版本的,是线程不安全的,效率高
- StringBuffer和String作为参数传递
- 基本数据类型的值传递,不改变其值
- 引用数据类型的值传递,改变其值
- String虽然是引用数据类型,但是它当作参数传递时和基本数据类型一样
String
public static void main(String[] args){
String a = "abc";
System.out.println(a);//adc
change(a);
System.out.println(a);//adc
}
public static void change(String s) {
s += "def";
}
StringBuffer
public static void main(String[] args){
StringBuffer b = new StringBuffer("abc");
System.out.println(b);//abc
change2(b);
System.out.println(b);//ancdef
}
private static void change2(StringBuffer b) {
b.append("def");
}
Arrays数组工具类
- 私有构造,方法静态,就可以类名.调用方法
- 重要的方法:
- public static String toString(int[] a)
- public static void sort(int[] a)
- public static int binarySearch(int[] a,int key)(需要在调用前,对数组进行排序)
//数组转字符串
int[] arr= {33,22,11,44,66,55};
System.out.println(Arrays.toString(arr));//[33, 22, 11, 44, 66, 55]
//排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));//[11, 22, 33, 44, 55, 66]
//查找元素的位置
int[] arr2= {11,22,33,44,55,66};
System.out.println(Arrays.binarySearch(arr2, 22));//1
小知识
- Java中的内存分配以及栈和堆的区别
- A:栈(掌握)
- 存储局部变量
- B:堆(掌握)
- 存储new出来的数组或对象
- C:方法区
- D:本地方法区
- 和系统相关
- E:寄存器
- 给CPU使用
- -128到127时byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取,如果超过了byte取值范围就会再重新创建对象