java基础 Day17(包装类,字符串)

java基础 Day17(包装类,字符串),第1张

一、包装类的使用

含义:Java为每种基本数据类型封装的类
出现原因:
Java为纯面向对象语言,但是8种基本数据类型不能创建对象,那么就破坏了Java为纯面向对象语言的特征,所以Java又为每种基本数据类型封装了对应的类,这种类叫做封装类/包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

注意:Byte,Short,Integer,Long,Float,Double都继承自Object.Number
Character 和 Boolean直接继承自Object

手动拆箱,手动装箱,自动拆箱、自动装箱

public static void main(String[] args) {
		//手动装箱:基本数据类型 --> 包装类
		int i = 1;
		Integer integer = Integer.valueOf(i);
		System.out.println(integer);
		
		//手动拆箱:包装类 --> 基本数据类型
		Integer in = new Integer(1);
		int i1 =in.intValue();
		System.out.println(i1);
		
		//自动装箱
		int i2 = 100;
		Integer in1 = i2;//底层:Integer.ValueOf(i2)
		System.out.println(in1);
		
		//自动拆箱
		Integer in2 = new Integer(100);
		int i3 = in2;	//底层:in2.intValue()
		System.out.println(i3);
		
	}

Integer底层有个缓存数组:存储的是-128~127的Integer对象
原因:-128~127的Integer对象使用评率高

public static void main(String[] args) {
		Integer integer1 = Integer.valueOf(100);
		Integer integer2 = Integer.valueOf(100);
		System.out.println(integer1 == integer2);//true
		
		Integer integer3 = Integer.valueOf(200);
		Integer integer4 = Integer.valueOf(200);
		System.out.println(integer3 == integer4);//false
		
		Integer integer5 = new Integer(100);
		Integer integer6 = new Integer(100);
		System.out.println(integer5 == integer6);//false
		//默认调用toString
		System.out.println(integer1.toString());
		System.out.println(integer2.toString());
		System.out.println(integer3);
		System.out.println(integer4);
}
二、String、StringBuilder、StringBuffer

String:

public class Test01 {
	public static void main(String[] args) {
		String str = "123abc";
		
		str = str.concat("DEF123");//在此字符串末尾追加目标字符串,并返回新的字符串 123abcDEF123
		str = str.substring(2);//从执行下标开始截取到字符串的末尾3abcDEF123
		str = str.substring(1, 7);//从开始下标处(包含)截取到结束下标处(不包含),并返回新的字符串 abcDEF
		str = str.toLowerCase();//转小写,并返回新的字符串 abcdef
		str = str.toUpperCase();//转大写,并返回新的字符串ABCDEF
		System.out.println(str);
		
		str = "   123   abc DEF 123     ";
		
		str = str.trim();//去掉收尾空格,并返回新的字符串123   abc DEF 123
		str = str.replace('3','x' );//替换字符,并返回新的字符串12x   abc DEF 12x
		str = str.replaceAll("abc", "ABC");//替换字符串,并返回新的字符串12x   ABC DEF 12x
		str = str.replaceAll(" ", "");//去掉空格,将空格替换成空内容的字符串12xABCDEF12x
		str = str.replaceFirst("12", "45");//替换第一次出现的字符串45xABCDEF12x
		System.out.println(str);
		
		System.out.println("获取字符串长度"+ str.length());//12
		System.out.println("判断两个字符串是否相等(区分大小写)"+str.equals("45xabcDEF12x"));//false
		System.out.println("判断两个字符串是否相等(不区分大小写)"+str.equalsIgnoreCase("45xabcDEF12x"));//true
		
		System.out.println("判断某个字符串是否以某个字符串开头"+str.startsWith("45"));//true
		System.out.println("判断某个字符串是否以某个字符串结尾"+str.endsWith("12x"));//true
		
		System.out.println("获取子字符串第一次出现的下标:"+str.indexOf("x"));//2
		System.out.println("获取子字符串最后一次出现的下标:"+str.lastIndexOf("x"));//11
		
		System.out.println("获取指定下标上的字符"+str.charAt(3));//A
		
		System.out.println("将int转为String:"+String.valueOf(12));
		System.out.println("将float转换为String:" + String.valueOf(123.123f));
		System.out.println("将double转换为String:" + String.valueOf(123.123));
		System.out.println("将char转换为String:" + String.valueOf('A'));
		System.out.println("将boolean转换为String:" + String.valueOf(true));
		
		//将其他类型转换为String类型,最简便的方式(+ 空字符串)
		System.out.println(100 + "");
		System.out.println(123.123f + "");
		System.out.println(123.123 + "");
		System.out.println('A' + "");
		System.out.println(true + "");
		
	}
}

StringBuffer:

public class Test02 {
	public static void main(String[] args) {
	
		//创建StringBuffer的对象---默认为长度16的char[]
		//StringBuffer stringBuffer1 = new StringBuffer();
		
		//创建StringBuffer的对象 -- 自定义长度为100的char[]
		//StringBuffer stringBuffer1= new StringBuffer(100);
		
		//创建StringBuffer的对象 -- 长度:"123abc".length() + 16
		StringBuffer stringBuffer = new StringBuffer("123abc");//
		
		System.out.println(stringBuffer.length());
		
		stringBuffer.append("DEF123");//在末尾追加类容123abcDEF123
		stringBuffer.insert(6, "xxx");//123abcxxxDEF123
		stringBuffer.setCharAt(3, 'A'); //替换指定下标上的字符 123AbcxxxDEF123
		stringBuffer.delete(5,8);//删除指定下标上的字符123AbxDEF123 左闭右开
		stringBuffer.replace(3, 6, "BCDD");//替换开始下标处(包含)到结束下标处(不包含)的字符串123BCDDDEF123
		stringBuffer.reverse();//反转字符串321FEDDDCB321
		
		System.out.println(stringBuffer);
		
		//获取字符串长度
		System.out.println("获取字符串长度:"+stringBuffer.length());
		

	}
}

StringBuilder

public class Test03 {
	public static void main(String[] args) {
		
		//创建StringBuilder的对象 -- 默认长度为16的char[]
		 //StringBuilder stringBuilder = new StringBuilder();
		
		//创建StringBuilder的对象 -- 自定义长度为100的char[]
		//StringBuilder stringBuilder = new StringBuilder(100);
		
		//创建StringBuilder的对象 -- 长度:"123abc".length() + 16
		 StringBuilder stringBuilder = new StringBuilder("123abc");
		 
		 stringBuilder.append("DEF123");//在末尾追加内容123abcDEF123
		 stringBuilder.insert(6,"xxx");//在指定下标上插入字符串123abcxxxDEF123
		 stringBuilder.setCharAt(3, 'A');//替换指定下标上的字符123AbcxxxDEF123
		 stringBuilder.deleteCharAt(1);//删除指定下标上的字符13AbcxxxDEF123
		 stringBuilder.delete(5, 8);//删除开始下标处(包含)到结束下标处(不包含)的字符串13AbcDEF123
		 stringBuilder.replace(3, 6, "BCDD");//替换开始下标处(包含)到结束下标处(不包含)的字符串13ABCDDEF123
		 stringBuilder.reverse();//反转321FEDDCBA31
		 
		 System.out.println(stringBuilder);
		
		 System.out.println("获取字符串长度:"+stringBuilder.length());
		
		 

----String是不可变对象,底层字符数组用final修饰,因此调用 *** 作字符串的方法都返回一个新的String对象
----StringBuilder和StringBuffer是可变对象,二者的使用方式差不多

共同点:StringBuilder和StringBuffer都是继承AbstractStringBuilder,所有使用的功能都是调用的父类里的方法,所以这两个类使用上都是一模一样的
StringBuilder:线程不安全的(没有上锁、解锁的过程),单线程的情况下使用
StringBuffer:线程安全的(上锁、解锁的过程),多线程的情况下使用,比起StringBuilder,效率低

注意
String类型做拼接时:
str += “拼接的字符串”;
底层: str = new StringBuidler(str).append(“拼接的字符串”).toString();

所以,要做大量的字符串拼接 *** 作时,建议使用StringBuiler

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/871054.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存