Java笔记(11)包装器类
1.包装类
为了让基本类型可以进行更多的操作,Java分别对不同基本类型实现了其对应的包装器类,用于完成其的一些功能操作;
byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Char
boolean -> Boolean
2.Integer
Integer类是基本类型int的包装器类,是抽象类Number类的子类;里面包装了一个int类型的值;
Integer的构造方法:
Integer i = new Integer(100);
Integer i = new Integer(“100”);
int和String的相互转换:
int -> String: String.valuerOf(“100”);
String -> int: Integer.paserInt(“100”);//这里的字符串必须是数字,否则运行会报错
Integer的JDK5新特性:自动装箱和自动拆箱
装箱,就是把基本类型转为引用类型,例如:
Integer a = new Integer(99);
拆箱,就是把引用类型转为基本类型,例如:
int b = a.intValue(); //这里调用了Integer对象的intValue方法,将Integer转为int类型
而自动装箱就相当于下面这样:
Integer a = 98;
本质上是编译器做了优化在上面这个操作里做了隐式调用valueOf()方法,由于不用我们手动去进行基本类型向包装器类型的转换,因此称为自动装箱;
自动拆箱:
Integer b = 128;
int d = b;
和自动装箱原理一样,编译器编译后自动加上了intValue()方法,无需我们手动拆箱;
Integer的小问题:
Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d = 200;
int e = 100;
int f = 200;
a == b;//true
c == d;//false
a == e;//true
d == f;//true
由于==用在比较引用类型的时候,一般都是比较的其对象是否相同,因此理想中
"a == b"应该是false,但结果是true,其实是因为Interger里面定义了一个内部缓存类,里面有一个缓存数组,存储了(-128 ----- 127)范围的数值,如果Interger接收的数据在这个范围里面,就不用再创建对象,直接拿这个值的引用即可,类似于String类的字符串常量池;
而“a == e”和"d == f "是自动拆箱,在比较的时候a和d都做了自动拆箱,因此相当于两个int类型的基本类型在比较,比较的就是值,自然是true;
3.Character
如同Integer一样,Character是char类型的包装器类,在Java中,八大基本类型都有其对应的包装器类;
Character构造方法:
Character ch = new Character(‘a’);
Character类主要成员方法:
· public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符
· public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符
· public static boolean isDigit(char ch):判断给定的字符是否是数字字符
· public static char toUpperCase(char ch):把给定的字符转换为大写字符
· public static char toLowerCase(char ch):把给定的字符转换成小写字符