WHAT?
什么叫拆装箱(Boxing,Unboxing)?
拆装箱就像你包装快递,拆快递一样。
拆装箱的行为作用在
包装类上。
装箱就是把基本数据类型转换为包装类。拆箱则是把包装类转换为基础数据类型。
拆装箱给我们提供一种机制,可以在这两种数据类型之间进行转换。
什么是基本数据类型和包装类?
Java数据类型分为两种,一种是内置数据类型,一种是引用数据类型。
内置类型有八种:
四个整数型 byte short int long
两个浮点型 float double
一个字符型 char
一个布尔型 boolean
对于引用类型的变量,它在java中类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。。
所以什么是包装类(Wrapping Class)?就是指基本数据类型的对象类,可以进行引用数据。
当我们引用这个类型的变量时,不再仅仅只是值传递,而是引用的传递,任何改变都会被应用在这个变量所在的内存块。
char
|
Character
|
int
|
Integer
|
short
|
Short
|
byte
|
Byte
|
long
|
Long
|
float
|
Float
|
double
|
Double
|
boolean
|
Boolean
|
WHY?
在我们知道拆装箱是基于包装类和基础类型的操作后。试问,为什么要有包装类?
这源于一个古老的理念“万物皆对象,对象皆有类“。这句话我一搜,可以搜出来”java有一个核心原则,叫做万物皆对象。“”python有一个重要理念,万物皆对象“”JavaScript有一个重要的原则叫做万物皆对象“”C#……“
对于这些语言而言,对象一定非常重要……(这是一个笑话
什么是对象?<———在这里。
总之,我们为了可以将基本数据类型也可以当做对象来使用,故而设计了包装类。并且给了它一套可以使用的操作。拆装箱只是在包装类与基本数据类型转换的一个操作。
HOW?
如今的java提供了一种自动化的拆装箱.
//手动装箱:
Integer in = Integer.valueOf(num);
//手动拆箱
Integer num = 10;//自动装箱
int i = num.intValue();
在如下几种情况,编译器会自动帮助我们干活:
-
进行 = 赋值操作(装&拆
-
进行+,-,*,/ 运算(拆
-
进行>,< == 比较运算(拆
-
使用equals进行比较(装&拆
-
ArrayList,HashMap等集合类添加基本类型数据(装
//自动装箱
Integer num = 10;
//自动拆箱
int num = 10;
Integer num2 = 10;
int i = num+num2;
如何理解 使用集合类添加基本数据类型时的自动装箱?
HashMap<Integer,Integer> here = new HashMap<Integer,Integer>();
here.put(1,1);
here.put(2,2);
here.get(2);
HashMap存储了Integer与Integer对应的关系和值,我们传入的是int。自动装箱为Integer
当我们使用get,我们得到了对应key的值,从Integer自动拆箱为int
一道很经典的题:
以下代码会输出什么?
public class Main{
public static void main(String[] args){
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
结果是:true,false
这是因为编译器存在一个缓存数组,大小为-128~127,用于缓存这个范围内所有创建的实例对象。如果之前有存在就直接拿来用,不存在的话就new一个新的Integer对象。因为200大于127,所以每一次建立都是在建立一个新的Integer.
类的具体使用:
Integer类
-
创造方法
//Integer(int value)
Integer integer1 = new Integer(100);
//Integer(String s)
Integer integer2 = new integer(“100”);
-
常用方法
方法
|
返回值
|
功能
|
byteValue()
|
byte
|
以byte类型返回该Integer值
|
shortValue()
|
short
|
以short类型返回该Integer值
|
intValue()
|
int
|
以int类型返回该Integer值
|
toString()
|
String
|
返回一个表示该Integer值的String
|
equals(Object obj)
|
boolean
|
比较此对象与指定对象是否相等
|
compareTo(another Integer)
|
int
|
相等等于0,小于another返回负值,else返回正值
|
valueOf(String s)
|
Integer
|
返回指定String Integer值
|
parseInt(String s
|
int
|
将数字字符串转换为int数值
|
-
Integer类常量
-
MAX_VALUE:值为2的31次幂-1,代表int类型可以达到的最大值
-
MIN_BALUE:值为-2的31次幂,表示int类型能达到的最小值
-
SIZE:用来以二进制不嘛表示int值的比特位数(32
-
TYPE:表示基本类型int的class实例
int max_val = Integer.MAX_VALUE;
Class c = Integer.TYPE;
Float类
-
构造方法
有三个:
//Float(double vaue)
Float float1 = new Float(3.1415926);
//Float(float value)
Float float2 = new Float(6.5f);
//Float(String s)
Float float3 = new Float(“3.1415”)
-
常用方法
方法
|
返回值
|
功能
|
byteValue()
|
byte
|
以byte类型返回该Float值
|
doubleValue()
|
double
|
以double类型返回该Float值
|
floatValue()
|
float
|
以float类型返回该Float值
|
intValue()
|
int
|
以int类型返回该Float值(强制转换)
|
longValue()
|
long
|
以long类型返回该Float值(强制转换)
|
shortValue()
|
short
|
以short类型返回该Float值(强制转换)
|
isNaN()
|
boolean
|
如果此float是一个非数字值返回true,否则false
|
toString()
|
String
|
返回一个表示该float值的String
|
equals(Object obj)
|
boolean
|
比较此对象与指定对象是否相等
|
valueOf(String s)
|
Float
|
返回指定String Float值
|
parseFloat(String s
|
float
|
将数字字符串转换为float数值
|
-
常用常量
MAX_VALUE:值为1.4E38的常量,表示float类型能表示的最大值
MIN_VALUE:值为3.4E-45常量 表示最小值
MAX_EXPONENT:有限float变量可能具有的最大指数
MIN_EXPONENT
MIN_NORMAL:保存float类型树脂的最小标准常量 即2的-126次幂
NaN:保存float类型的非数字值常量
SIZE:用来以二进制补码形式表示float值的比特位数
TYPE :表示基本来兴float的clss实例
DOUBLE 类类似Float
Character类
-
创建
Character ch = new Charcter(’s’);
-
常用方法
方法
|
描述
|
void Character(char value)
|
构造一个新分配的character对象,用以表示指定char值
|
char charValue()
|
返回此Character对象的值,此对象表示基本char值
|
int compareTo(Character anotherCharacter)
|
根据数字比较两个 Character 对象,这个值是两个字符比较厚标准代码差值
|
boolean equals(Character anotherCharacter)
|
将此对象与指定对象比较,当且仅当参数不是 null,而 是一个与此对象
包含相同 char 值的 Character 对象时, 结果才是 true
|
boolean isDigit(char ch)
|
确定指定字符是否为数字,如果通过 Character. getType(ch) 提供的字
符的常规类别类型为 DECIMAL_DIGIT_NUMBER,则字符为数字
|
boolean isLetter(int codePoint)
|
确定指定字符(Unicode 代码点)是否为字母
|
boolean isLetterOrDigit(int codePoint)
|
确定指定字符(Unicode 代码点)是否为字母或数字
|
boolean isLowerCase(char ch)
|
确定指定字符是否为小写字母
|
boolean isUpperCase(char ch)
|
确定指定字符是否为大写字母
|
char toLowerCase(char ch)
|
使用来自 UnicodeData 文件的大小写映射信息将字符参数转换为小写
|
char toUpperCase(char ch)
|
使用来自 UnicodeData 文件的大小写映射信息将字符参数转换为大写
|
compareTo的用法:
Character character = new Character('A');
int result1 = character.compareTo(new Character(‘A'));
System.out.println(result1); // 输出:0
int result2 = character.compareTo(new Character('B'));
System.out.println(resuit2); // 输出:-1
int result3 = character.compareTo(new Character('1'));
System.out.println(result3); // 输出:-2
如何使用Character的静态方法验证用户名性别年龄邮箱地址符合标准:
public class Register {
public static boolean validateUser(String uname,String upwd,String age) {
boolean conUname = false; // 用户名是否符合要求
boolean conPwd = false; // 密码是否符合要求
boolean conAge = false; // 年龄是否符合要求
boolean con = false; // 验证是否通过
if (uname.length() > 0) {
for (int i = 0;i < uname.length();i++) {
// 验证用户名是否全部为字母,不能含有空格
if (Character.isLetter(uname.charAt(i))) {
conUname = true;
} else {
conUname = false;
System.out.println("用户名只能由字母组成,且不能含有空格!");
break;
}
}
} else {
System.out.println("用户名不能为空!");
}
if (upwd.length() > 0) {
for (int j=0;j<upwd.length();j++) {
// 验证密码是否由数字和字母组成,不能含有空格
if (Character.isLetterOrDigit(upwd.charAt(j))) {
conPwd = true;
} else {
conPwd = false;
System.out.println("密码只能由数字或字母组成!");
break;
}
}
} else {
System.out.println("密码不能为空!");
}
if (age.length() > 0) {
for (int k = 0;k < age.length();k++) {
// 验证年龄是否由数字组成
if (Character.isDigit(age.charAt(k))) {
conAge = true;
} else {
conAge = false;
System.out.println("年龄输入有误!");
break;
}
}
} else {
System.out.println("年龄必须输入!");
}
if (conUname && conPwd && conAge) {
con = true;
} else {
con = false;
}
return con;
}
}
Boolean类
-
构造方法
Boolean(boolean boolValue);
Boolean(String boolString);
构造方法
方法 | 返回值 | 功能 |
booleanValue() | boolean | 将 Boolean 对象的值以对应的 boolean 值返回 |
equals(Object obj) | boolean | 判断调用该方法的对象与 obj 是否相等。当且仅当参数不是 null,且与调用该 方法的对象一样都表示同一个 boolean 值的 Boolean 对象时,才返回 true |
parseBoolean(String s) | boolean | 将字符串参数解析为 boolean 值 |
toString() | string | 返回表示该 boolean 值的 String 对象 |
valueOf(String s) | boolean | 返回一个用指定的字符串表示的 boolean 值 |
-
常用常量
TRUE:对应基值 true 的 Boolean 对象。
FALSE:对应基值 false 的 Boolean 对象。
TYPE:表示基本类型 boolean 的 Class 对象。