文章目录
一、Integer和int的类型转换
【注: java中的自动拆箱、自动装箱机制会对基本类型和它们对应的包装类进行自动转换,所以不需要刻意人为去转换。这是只是介绍一下以下的两种方法】
5.1 int转为Integer:valueOf()
Integer a1 = Integer.valueOf(100);
valueOf()中的参数也可以为String,但同样的,也必须为纯数字。
5.2 Integer转为int:intValue()
Integer a1 = 100;
int a2 = a1.intValue();
intValue()是java.lang.Number类的方法,Number是一个抽象类, Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。
此方法的意思是:输出int数据。
二、自动装箱、自动拆箱介绍
- 概念: 自动装箱指的是基本数据类型赋值给其对应的包装类引用类型时,基本数据类型会自动装箱为引用类型;自动拆箱指的是包装类引用类型自动拆箱为对应的数值类型。
- 发生场所: 赋值、比较。
- 代码应用:
public void Integer_int() {
int a0 = 10;
int a1 = 10;
Integer n1 = 10; //赋值时自动装箱,将数值10封装为对象
Integer n2 = 10;
Integer n3 = new Integer(10);
Integer n4 = new Integer(10);
Integer n5 = 199;
Integer n6 = 199;
System.out.println(a0 == a1); //true 比较值
System.out.println(a0 == n1); //true 引用和数值比较时,引用自动拆箱为数值,进行数值之间的比较
System.out.println(a0 == n3); //true n3自动拆箱后数值为10
System.out.println(n1 == n2); //true 10在常量池存在,n1、n2指向同一个地址
System.out.println(n1 == n3); //false new的
System.out.println(n3 == n4); //fasle new的
System.out.println(n5 == n6); //fasle 超出常量池范围,直接new新的对象
}
三、自动装箱、自动拆箱应用
public void testbyte() {
Byte a = 123; // 自动装箱,将123自动装箱为引用类型,赋值给a
Byte c = a; // a、c同为引用类型,指向同一个堆的值
System.out.println(c == a); // true c、a同为引用,比较的是两个引用的地址
a++;
// 相当于:
// byte a = 123; 拆箱:将a这个引用类型拆箱为byte基本数据
// a++; a自身加1(++本身相当于赋值)
// Byte a1 = a; 装箱:此时a为byte,需要将其装箱为Byte类型
System.out.println(c == a); // 比较地址,但是a的指向已改变
}
输出
true
false
自动拆箱相当于把123对象中的数值123取出来复制给基本数据类型变量上的过程,所以c还是指向原来的123对象。