Java零基础学习(StringBuffer StringBuilder Arrays 基本数据类型包装类)

StringBuffer类的概述

1.StringBUffer类概述
	我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时又浪费空间,而StringBuffer就可以解决这个问题
	线程安全的可变字符序列
StringBuffer类的构造方法
1.构造方法
	public StringBuffer() 无参构造方法
	public StringBuffer(int capacity) 指定容量的字符缓冲区对象
	public StringBuffer(String str) 指定字符串内容的字符缓冲区对象
2.StringBuffer的方法:
	public int capacity() 返回当前容量 理论值
	public int length() 返回长度 实际值
	public String toString() 返回容器里的字符串
StringBuffer的添加功能
public StringBuffer append(String str)
	可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offest,String str)
	在指定位置把任意类型的数据插入到字符缓冲区里面,并返回字符缓冲区本身
StringBuffer的删除功能
public StringBuffer deleteCharAt(int index)
	删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end)
	删除从指定位置开始,指定位置结束的内容,含头不含尾并返回本身
StringBuffer的替换和反转功能
1.替换功能
	public StringBuffer replace(int start,int end,String str)
	从start开始到end用str替换
2.反转功能
	public StringBuffer reverse()
	字符串反转
StringBuffer的查找功能
int indexOf(String str)
	从头查找该字符串,在容器中出现的索引,如果没有就返回-1
int indexOf(String str,int fromIndex)
	从指定位置开始查找该字符串在容器中的索引,如果找不到就返回-1

从后往前找
int lastIndexOf(String str)
int lastIndexOf(String str,int fromIndex)
StringBuffer的截取功能
1.截取功能
	public String substring(int start)
	从指定位置起截取到末尾
	public String substring(int start,int end)
	从指定位置起截取到指定位置结束,含头不含尾
2.注意事项
	返回值类型不再是StringBuffer本身
StringBuffer和String的相互转换
1.String---StringBuffer
	a.通过构造方法
	b.通过append()方法
2.StringBuffer---String
	a.使用substring方法
	b.通过构造方法
	c.通过toString()方法
把数组转换成字符串
案例演示
	需求:把数组中的数据按照指定个格式拼接成一个字符串
		举例:
			int[] arr = {1,2,3};	
		输出结果:
			"[1, 2, 3]"
	用StringBuffer的功能实现
public class Sb2 {
    public static void main(String[] args) {
        int[] arr ={1,2,3};
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for (int i=0;i<arr.length;i++){
            if (i==arr.length-1){
                sb.append(arr[i]);
                break;
            }
            sb.append(arr[i]+",");
        }
        sb.append("]");
        System.out.println(sb);
    }
}
字符串反转
案例演示
	需求:把字符串反转
		举例:键盘录入"abc"		
		输出结果:"cba"
	用StringBuffer的功能实现	
import java.util.Scanner;
public class Sb2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str=sc.nextLine();
        StringBuffer sb = new StringBuffer(str);
        sb.reverse();
        System.out.println(sb);
    }
}
StringBuffer和StringBuilder的区别
StringBuffer在多线程安全单速度慢
StringBilder在多线程不安全但速度快
StringBilder在单线程也是安全的
String和StringBuffer分别作为参数传递
形式参数问题
	String作为参数传递,String虽然是引用类型,但是它是一个常量,所以在传递的时候,完全将其看成基本数据类型传递,String类型传递输入值传递
	StringBuffer作为参数传递,传递的是地址值
public class Sb2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc");
        String str="abc";
        string(str);
        stringBuffer(sb);
        System.out.println(str);
        System.out.println(sb);
    }
    public static void string(String str){
        str="cba";
    }
    public static void stringBuffer(StringBuffer stringBuffer){
        stringBuffer.reverse();
    }
}

输出
	abc
	cba

Arrays类的概述和方法使用

1.概述
	针对数组进行操作的工具类
	提供了排序,查找等功能
2.方法
	public static String toString(int[] a)
	返回数组的字符串表示形式
	public static void sort(int[] a)
	对指定的int类型数组排序
	public static int binarySearch(int[] a,int key)
	使用二分查找法查找数组元素的位置
	public static boolean equals(int[] a1,int[] a2)
	比较两个数组中的元素是否一样
	public int[] coopyOf(int[] original,int newLength)
	复制旧数组中的元素到一个新的数组中,新数组的长度是newLength,从0开始复制旧数组
	public int[] copyOfRange(int[] original,int from,int to)
	复制旧数组中的指定范围间的几个元素带新的数组中 from起始索引 to 终止索引

常见类型基本包装类的概述

1.需求:
	a:将100转换成二进制 , 八进制 , 十六进制
	b:判断一个数是否在int的范围内
2.为什么会有基本类型包装类
	为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了对应的类类型.
3.常用操作:	常用的操作之一:用于基本数据类型与字符串之间的转换。
4.基本类型和包装类的对应
	byte		Byte
	short		Short
	int			Integer
	long		Long
	float		Float
	double		Double
	char		Character
	boolean		Boolean
Integer类的概述和构造方法
1.概述
	Integer类在对象中包装了一个基本数据类型int的值
	该类还提供了多个方法,能在int类型和String类型之间相互转化
	还提供了处理int类型是非常有用的其他的常量和方法
2.构造方法
	public Integer(int value)
	创建一个Integer对象,他表示的是int的值
	public Integer(String s)
	创建一个Integer对象,他表示String参数所指示的int值,s的字必须是数字字符串,不然就会报错
String和int类型的相互转换
int---String
	a.和""进行拼接
	b.public static String valueOf(int i)
	c.int---Integer---String
	d.public static String toString(int i)
String---int 
	a.String---Integer---intValue()
	b.public static int parseInt(String s)
JDK5的新特性自动拆装箱
1.JDK5的新特性
	自动装箱:把基本类型转换为包装类类型
	自动拆箱:把包装类类型转换为基本类型
2.案例演示
	JDK5的新特性自动装箱和拆箱
	Integer ii = 100;//自动装箱功能,把int类型的数据变成Integer类型
	ii += 200;//自动拆箱功能,把Integer类型变成int类型
3.注意事项
	在使用时,Integer  x = null;代码就会出现NullPointerException。
	建议先判断是否为null,然后再使用。
Integer面试题
看程序写结果
	
	Integer i1 = new Integer(127);
	Integer i2 = new Integer(127);
	System.out.println(i1 == i2);
	System.out.println(i1.equals(i2));
	System.out.println("-----------");

	Integer i3 = new Integer(128);
	Integer i4 = new Integer(128);
	System.out.println(i3 == i4);
	System.out.println(i3.equals(i4));
	System.out.println("-----------");

	Integer i5 = 128;
	Integer i6 = 128;
	System.out.println(i5 == i6);
	System.out.println(i5.equals(i6));
	System.out.println("-----------");

	Integer i7 = 127;
	Integer i8 = 127;
	System.out.println(i7 == i8);
	System.out.println(i7.equals(i8));
	
false
true
---------------
false
true
---------------
false
true
---------------
true
true
java为了提高效率,所以缓存了-128--127之间的数据,如果自动拆装箱的数据在这个范围之内,就可已通过==号比较是否相等,但是这个数据之外还是得用equals