一 、包装类基本概念:
Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。位于java.lang包下。
包装类均位于java.lang包,八种包装类和基本数据类型的对应关系如下表:
//基本类型转换为Integer对象
Integer in1=new Integer(10);
Integer in2=Integer.valueOf(20);//官方推荐使用
//integer对象转换为int
int a=in1.intValue();
//一些常见int类型的相关的常量
System.out.println("int能表示的最大整数:"+Integer.MAX_VALUE);
二、自动装箱和拆箱
自动装箱:基本数据类型处于需要对象的环境中会自动装箱。自动装箱调用的是valueOf()方法,而不是new Integer()方法。
自动拆箱:当需要一个值时,对象就会自动拆箱为值。自动拆箱调用的intValue()方法。
Integer a =234;//自动装箱, Integer a= Integer.valueOf(234);
int b=a; //自动拆箱。编译器会自动修改为:int b=a.intValue();
Integer c=null;
if(c!=null) {
int d=c;
}
Integer c=null;
if(c!=null) {
int d=c; // 此处其实就是:c.intValue(),因此抛空指针异常。
}
三、包装类的缓存问题
整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。
/**
* 缓存,[-128~127]之间的数字,实际上就是系统初始的时候,创建了[-128~127]之间的一个缓存数组。
* 当我们调用valueOf()的时候,首先检查是否在[-128~127]之间,如果在这个范围内则直接从缓存
* 数组拿出已经创建好的对象,如果不在这个范围,则创建新的对象。
*/
Integer in1=Integer.valueOf(-128);
Integer in2=-128;
System.out.println(in1==in2);//true 因为-128在缓存范围内
System.out.println(in1.equals(in2));//true
System.out.println("………………………………");
Integer in3=Integer.valueOf(1234);
Integer in4=1234;
System.out.println(in3==in4);//false 因为1234不在缓存范围内,比较地址
System.out.println(in3.equals(in4));//true
四、string类
1、String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。
String s1="Hello";
String s2=s1.substring(2,3);//输出l 对字符串的截取操作
//打印:42628b2
System.out.println(Integer.toHexString(s1.hashCode()));
//打印:6c
System.out.println(Integer.toHexString(s2.hashCode()));
2、字符串常量拼接时的优化
//编译器做了优化,直接在编译的时候字符串进行了拼接
String str1="hello"+" java";//相当于str1="hello java";
String str2="hello java";
System.out.println(str1==str2);//true
String str3="hello";
String str4=" java";
//编译器不知道变量存储的是什么,所以没办法在编译的时候优化
String str5=str3+str4;
System.out.println(str2==str5);//false
3、String类常用的方法
-
String类的下述方法能创建并返回一个新的String对象: concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()。
-
提供查找功能的有关方法: endsWith()、 startsWith()、 indexOf()、lastIndexOf()。
-
提供比较功能的方法: equals()、equalsIgnoreCase()、compareTo()。
-
其它方法: charAt() 、length()。
5、StringBuilderStringBuffer常用方法
5、StringBuilderStringBuffer陷阱
五、时间类
六、时间类
SimpleDateFormat
七、日历类
八、math类
九、Random类