DAY12-字符串缓冲区,包装类

今日内容: 字符串缓冲区,包装类

StringBuffer和StringBuilder

StringBuffer和StringBuilder是字符串缓冲区,缓冲区可以理解为一个可变容量的容器。可以存取可更改的字符串,二者的区别就是StringBuffer线程是安全的,StringBuilder线程是不安全的,相应的,StringBuffer的效率要比StringBuilder低。Stringbuffer默认容量是16字节,扩充后是原容量X2+2,如果创建的时候加了字符串,那么容量=字符串容量+16+3。
1.append方法:

//添加数据obj.append();
StringBuffer sb=new StringBuffer(a,b,c);
sb.append("a,b,c,d").append(1,2,3).append(true);
System.out.pritnln(sb);//输出的结果为:abcabcd123true

2.insert方法:

//插入数据obj.insert(int offset,任意类型数据)
StringBuffer sb=new StringBuffer(a,b,c);
sb.insert(0,123);
System.out.pritnln(sb);//输出的结果为:123abc

3.delete方法:
delete(int start,int end);删除 [start,end) 区间的数据
deleteCharAt(int index);删除指定下标处的字符
4.replace方法:
replace(int start,int end,String str); 用给定的字符(串)替换指定的区间
5.reverse方法:
将字符串前后倒序显示。
6.setCharAt方法:
setCharAt(int index,char ch);将指定的索引位置替换成新字符ch
7.获取长度
StringBuffer a=new StrinGBuffer();
a.length();获取这个字符串的长度
8.substring方法:
StringBuffer a=new StrinGBuffer();
a.substring(int start);从这个位置开始向后获取所有的字符串
substring(int start,int end);获取start到end区间所有的字符串
9.indexOf(String str):获取指定字符串的第一次出现的下标值
indexOf(String str,int fronIndx);从指定位置开始获取指定字符串的下标值
lastIndexOf(String str);从后往前获取第一次出现指定字符串的下标值
lastIndexOf(String str,int fromIndex);从指定下标开始从后往前获取指定字符串第一次出现的下标值。

String和StringBuffer之间的转换

StringBuffer s1=new StringBuffer("");//字符串转换成缓冲区
String s2=new String(s1);//缓冲区转换成字符串
s1.toString;//默认的缓冲区转换成字符串

包装类

byte-----Byte
short---->Short
int---->Integer
long---->Long
float---->Float
double---->Double
boolean---->Boolean
char---->Character

属性

Integer.MAX_VALUE:最大值属性
Integer.MIN_VALUE:最小值属性
Integer.SIZE:大小(位数)
包装类已经将Object类继承下来的toString方法重写了,可以直接输出对象的值而不会输出地址值。
Integer in=new Integer(123);//基本----包装对象
System.out.println(in);//输出123而不是地址值
Integer in=new Integer(“123”);//字符串----包装对象
System.out.println(in);//输出123而不是地址值
Integer in=new Integer(“abc”);//基本----包装对象
System.out.println(in);//报错
注意:参数必须是整数数字格式的字符串,否则抛出异常,NumberFormatException
intValue方法:以int类型返回该integer的值
int num=in.intValue(); //包装对象—》基本类型数据

xxx parseXxx(str) 将字符串作为有符号的十进制数进行解析。(静态方法)
int num1 = Integer.parseInt(“123”); //将字符串----》基本
//注意:参数必须是 整数数字形式的字符串,否则抛出异常,NumberFormatException 数字格式化异常
System.out.println(num1); //输出123

基本类型—》包装类
new integer(int)
integer.valueOf(int)

包装类—》基本类
int intValue()

基本类型----》字符串类型
String.valueOf(int)
number+"" //加号连接符连接就成了字符串
Integer.toString(int)

字符串—》基本类型
Integer.parseInt(str)

字符串—》包装类
new Integer(str) ------- Integer.valueOf(str)

包装类—》字符串
new Integer.toString() ------- String.valueOf(new Integer())

自动装箱,自动拆箱

Integer x=new Integer(345);
Integer x=345;//自动装箱(省略了new Integer关键字)
int y=x;//自动拆箱(省略了.intValue())
自动装箱和拆箱,只要定义的数字在byte的取值范围之内(-128~127)之内,那么统一数据就之开辟一个空间,其他的引用都指向这个空间。

integer i=-128;
integer i2=-128;
System.out.println(i==i2);//true
Integer i3=-129;
Integer i4=-129;
System.out.println(i3==i4);//false
Integer i5=new Integer(127);
Integer i6=new Integer(127);
System.out.println(i5==i6);//false

经典比较:

public class Demo8 {
	public static void main(String[] args) {
		Integer a=20;//Object
		int a1=20;//basic
		Integer a2=Integer.valueOf(20);//Object
		Integer a3=new Integer(20);//Object
		
		System.out.println(a==a1);//true
		System.out.println(a==a2);//true
		System.out.println(a==a3);//false
		System.out.println(a1==a2);//true
		System.out.println(a1==a3);//true
		System.out.println(a2==a3);//false
	}
}
对于以上的情况总结如下:

  1.无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
  2.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
 	 java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
  3.两个都是new出来的,都为false
  4.int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

引用网址:https://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html

猜你喜欢

转载自blog.csdn.net/qq_42837554/article/details/88206258