
含义:Java为每种基本数据类型封装的类
出现原因:
Java为纯面向对象语言,但是8种基本数据类型不能创建对象,那么就破坏了Java为纯面向对象语言的特征,所以Java又为每种基本数据类型封装了对应的类,这种类叫做封装类/包装类
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
注意: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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)