Java包装类
知识点:
- 什么是包装类
- 包装类与基本数据类型之间的对应关系
- 包装类的常用方法
JAVA中的数据类型
为什么需要包装类?因为上述数据类型不能喝对象一样拥有属性、方法、以及对象化的进行交互,那么包装类的产生就是为了解决这种问题。
包装类与基本数据类型
大部分的包装类和基本数据类型基本相同,只有int-Integer,char-Character,变化较大。
基本数据类类型和字符串之间的转换
public class WrapTestTwo {
public static void main(String[] args) {
// 基本数据类型转换为字符串
int t1 = 2;
String t2 = Integer.toString(t1);
// 测试
System.out.println("int类型转换为String类型对象t2=" + t2);
System.out.println("***************************");
//字符串转换为基本数据类型
//1、包装类的parse
int t3 = Integer.parseInt(t2);
//2、包装类的valueOf 先将字符串转换为包装类,再通过自动拆箱完成基本类型转换
int t4 = Integer.valueOf(t2);
// 测试
System.out.println("String类型转换为int类型变量t3=" + t3);
System.out.println("String类型转换为int类型变量t4=" + t4);
}
}
需要知道的几点知识点
基本数据类型的初始化
包装类对象的初始值
思考:
定义了一个Integer类型对象one,他的初始值是不是也等于0呢?
package wrap;
public class Cat {
//成员属性
String name;
int month;
double weight;
}
package wrap;
public class CatTest {
public static void main(String[] args) {
//实例化对象
Cat one = new Cat();
//测试输出
System.out.println("小猫的昵称:" + one.name);
System.out.println("小猫的年龄:" + one.month);
System.out.println("小猫的体重:" + one.weight);
}
}
输出结果
小猫的昵称: null
小猫的年龄: 0
小猫的体重: 0.0
那如果我将年龄的属性改为Integer,double改为Double还会是一样的结果吗?
package wrap;
public class Cat {
//成员属性
String name;
Integer month;
Double weight;
}
再重新运行CatTest类,发现结果为:
小猫的昵称:null
小猫的年龄:null
小猫的体重:null
包装类对象间的比较
public static void main(String[] args){
// one这个值是新开的一个空间,里面存放的值是100
Integer one = new Integer(100);
// two这个值也是新开的一个空间,里面存放的值是100
Integer two = new Integer(100);
System.out.println("one==two的结果:" +(one==two));
Integer three = 100;//自动装箱
//Integer three = Integer.valueOf(100);
System.out.println("three==100结果:" +(three==100));//自动拆箱
Integer four = 100;
System.out.println("three==four的结果:" + (three==four));
Integer five = 200;
System.out.println("five==200的结果:" + (five==200));
Integer six = 200;
System.out.println("five==six的结果:" + (five==six));
Double d1 = Double.valueOf(100);
System.out.println("d1==100的结果:" + (d1==100));
Double d2 = Double.valueOf(100);
System.out.println("d1==d2的结果:" + (d1==d2));
}
结果:
one==two的结果:false
three==100的结果:true
three==four的结果:true
five==200的结果:true
five==six的结果:false
d1==100的结果:true
d1==d2的结果:false
其实java在自动拆装箱的时候,其实就是执行了这个方法
Integer four = Integer.valueOf(100);
在装箱的时候其实就是将实例化放入到了缓冲区,指向了同一空间,所以three==four为true。
还有特别重要的一点就是,我们的数值必须在-128~127之间。不然不会实例化。
在我们Java数据类型里面,除了我们的float和double,其他的都可以应用对象常量池概念的。
装箱和拆箱的理解
装箱:基本数据类型 -> 包装类
拆箱:包装类 -> 基本数据类型
public class WrapTestOne {
public static void main(String[] args) {
//装箱:把基本数据类型转换成包装类
//1、自动装箱
int t1 = 2;
Integer t2 = t1;
//2、手动装箱
Integer t3 = new Integer(t1);
//测试
System.out.println("int类型变量t1="+t1);
System.out.println("Integer类型对象t2="+t2);
System.out.println("Integer类型对象t3="+t3);
System.out.println("**************************");
//拆箱:把包装类转换成基本数据类型
//1、自动拆箱
int t4=t2;
//2、手动拆箱
int t5=t2.intValue();
//测试
System.out.println("Integer类型对象t2="+t2);
System.out.println("自动拆箱后,int类型变量t4="+t4);
System.out.println("手动拆箱后,int类型变量t5="+t5);
double t6=t2.doubleValue();
System.out.println("手动拆箱后,double类型变量t6="+t6);
}
}