包装类分类 WrapperType.java
针对八种基本数据类型定义相应的引用类型-包装类
有了类的特点,就可以调用类中的方法
除了Boolean和Character,其他六个的父类都是Number
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类和基本数据的转换
jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱
jdk5以后(含jdk5)的自动装箱和拆箱方式
自动装箱底层调用的是valueOf方法
public static void main(String[] args) {
//int<-->Integer的装箱和拆箱
//手动装箱int->Integer
int n1=100;
Integer integer = new Integer(n1);
Integer integer1 = Integer.valueOf(n1);
//手动拆箱Integer->int
int i=integer.intValue();
//jdk5后,就可以自动装箱和拆箱
//自动装箱int->Integer
int n2=200;
Integer integer2=n2;//底层使用的是Integer.valuOf(n2)
//自动拆箱Integer->int
int i1=integer2;//底层仍然使用的是intValue()方法
}
包装类型和String类型的相互转换
public static void main(String[] args) {
//包装类(Integer)->String
Integer i=100;//自动装箱
//方式1
String str1=i+"";
//方式2
String str2 = i.toString();
//方式3
String str3 = String.valueOf(i);
//String->包装类(Integer)
String str="12345";
int i1 = Integer.parseInt(str);//使用到自动装箱
Integer i2 = new Integer(str);//构造器
}
Integer创建机制:
如果i在(-128~127),就直接从数组返回
如果不在(-128~127),就直接new Integer(i)
String类的理解和创建对象
String对象用于保存字符串,也就是一组字符序列
字符串常量对象是用双引号括起的字符序列。例:“12”,“你好”,"boy"等
字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
String类较常用构造方法
String类实现了接口Serializable[String可以串行化:可以在网络传输]
String类实现了接口Comparable[String对象可以比较大小]
String有属性private final char value[]; 用于存放字符串内容
一定要注意:value是一个final类型,不可以修改(不能指向新的地址,但是单个字符内容是可以变化)
两种创建String对象的区别
方式一:直接赋值String s="aw";
方式二:调用构造器String s2=new String("aw");
方式一:先从常量池查看是否有“aw”数据空间,如果有,直接指向;如果没有则呈现创建,然后指向。s最终指向的是常量池的空间地址
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的aw空间。如果常量池没有“aw”,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
字符串的特性
String是一个final类,代表不可变的字符序列
字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的。
public static void main(String[] args) {
String a="Hello";
String b="abc";
//1.先创建一个StringBuilder sb=new StringBuilder();
//2.执行 sb.append("Hello");
//3. sb.append("abc");
//4.String c=sb.toString
//最后其实是c指向堆中的对象(String)value[]->池中“helloabc”
String c=a+b;
}
底层是StringBuilder sb=new StringBuilder();sb.append(a); sb.append(b); sb是在堆中,并且append是在原来字符串的基础上追加的。
重要规则:String c1="ab"+"cd";常量相加,看的是池。String c1=a+b;变量相加,是在堆中。
说明
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强Sting的功能,并提高效率
String类的常见方法一览
equals//区分大小写,判断内容是否相等
equalsIgnoreCase//忽略大小写的判断内容是否相等
length//获取字符的个数,字符串份长度
indexOf//获取字符串在字符串中第一次出现的索引,索引从0开始,如果找不到,返回-1
lastIndexOf//获取字符串在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
substring//截取指定范围的字符串
trim//去前后空格
charAt:获取某索引处的字符,注意不能使用Str[index]这种方式
toUpperCase:转换成大写
toLowerCase:转换成小写
concat//拼接字符串
replace//替换字符串中份字符
split//分割字符串,对于某些分割字符,我们需要转义 | \ \等
compareTo//比较两个字符串的大小
toCharArray//转换成字符数组
format//格式字符串,%s字符串,%c字符,%d整型,%.2f浮点型
//- equals//区分大小写,判断内容是否相等
String a="java";
System.out.println("java".equals(a));
//- equalsIgnoreCase//忽略大小写的判断内容是否相等
String b="xml";
System.out.println("XML".equalsIgnoreCase(b));
//- length//获取字符的个数,字符串份长度
System.out.println("money".length());
//- indexOf//获取字符串在字符串中第一次出现的索引,索引从0开始,如果找不到,返回-1
String s1="wyw@terwe@g";
int index = s1.indexOf("@");
System.out.println(index);
//- lastIndexOf//获取字符串在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
index = s1.lastIndexOf("@");
System.out.println(index);
//- substring//截取指定范围的字符串
String name="hello,张三";
System.out.println(name.substring(6));//截取后面的字符
System.out.println(name.substring(0,5));//截取0到5前一个的
//- toUpperCase:转换成大写
System.out.println(name.toUpperCase());
//- toLowerCase:转换成小写
System.out.println(name.toLowerCase());
//- concat//拼接字符串
a="浊心";
String c = a.concat("斯卡蒂");
System.out.println(c);
//- replace//替换字符串中份字符
String li = name.replace("张三", "李四");
System.out.println(li);
//- split//分割字符串,对于某些分割字符,我们需要转义 | \ \等
String poem="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
String[] split = poem.split(",");
//1以,为标准对poem进行分割,返回一个数组
//2在对字符串进行分割时,如果有特殊字符,需要加入转义符\
poem="E:\\aaa\\bbb";
split=poem.split("\\\\");
for (String s : split) {
System.out.println(s);
}
//- compareTo//比较两个字符串的大小,如果前者大,
//则返回正数,后者大在,则返回负数,如果相等,返回0
//(1)如果长度相同,并且每个字符也相同,就返回0
//(2)如果长度相同或者不相同,但是在进行比较时,可以区分大小就返回
//if(c1!=c2){
// return c1-c2;
// }
//(3)如果前面的部分都相同,就返回str1.Len-str2.Len
a="jc";
b="jack";
System.out.println(a.compareTo(b));//返回值是c-a=2的值
//- toCharArray//转换成字符数组
a="happy";
char[] chars = a.toCharArray();
for (char aChar : chars) {
System.out.println(aChar);
}
//- format//格式字符串,%s字符串,%c字符,%d整型,%.2f浮点型
name="李四";
int age=10;
double score