您的位置:首页 > Web前端

Java简单基础复习(六)StringBuffer,Arrays

2020-03-31 19:34 901 查看

StringBuffer

  1. 线程安全的可变字符序列。一个类似于String的字符缓冲区,但不能修改。
  2. StringBuffer和String的区别
      String是一个不可变的字符序列
    • StringBuffer是一个可变的字符序列
  3. 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 + 初始容量
  1. StringBuffer的添加功能
      public StringBuffer append(String str): 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
  2. public StringBuffer insert(int offset,String str):
      在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
    • 如果没有指定位置的索引,就会报索引越界异常
  3. StringBuffer是字符串缓冲区,当NEW的时候是在堆内创建一个对象,底层让那个是一个长度为16的字符数组当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
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
  1. StringBuffer的删除功能
      public StringBuffer deleteCharAt(int index): 删除指定位置的字符,并返回本身
  2. public StringBuffer delete(int start,int end):
      删除从指定位置开始指定位置结束的内容,并返回本身
StringBuffer sb = new StringBuffer();
sb.append("heima");
sb.deleteCharAt(4);
System.out.println(sb);//heim
sb.delete(0, 2);//删除的时候包含的是头不包含尾
System.out.println(sb);//im
  1. StringBuffer的替换和反转功能
  • A:StringBuffer的替换功能 public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换
StringBuffer sb = new StringBuffer("heima");
sb.replace(0, 3, "bai");//替换
System.out.println(sb);//baima
  • B:StringBuffer的反转功能 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
  1. StringBuffer的截取功能
      注意返回值类型不再是StringBuffer,而是String
    • public String substring(int start): 从指定位置截取到末尾
  2. 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
  1. 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());
  1. StringBuffer和StringBuilder的区别
      两个内的方法都是一样的。
    • StringBuffer是JDK1.0版本,是线程安全的,效率低
    • StringBuilder是JDK1.5版本的,是线程不安全的,效率高
  2. 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数组工具类

  1. 私有构造,方法静态,就可以类名.调用方法
  2. 重要的方法:
      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

小知识

  1. Java中的内存分配以及栈和堆的区别
  • A:栈(掌握) 存储局部变量
  • B:堆(掌握)
      存储new出来的数组或对象
  • C:方法区
  • D:本地方法区
      和系统相关
  • E:寄存器
      给CPU使用
    1. -128到127时byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取,如果超过了byte取值范围就会再重新创建对象
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    程序胖 发布了26 篇原创文章 · 获赞 16 · 访问量 2341 私信 关注
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐