Java是一种面向对象的编程语言,学习Java时就被明确灌输了一个概念:OOP,即面向对象编程。一切皆对象。但是基本类型是不具备Java中对象的某些特征,对象内部可以封装一系列属性和行为,但是这些在基本数据类型中都无法满足,所以对应的包装类型就应运而生了。也就是说单独的一个 int a = 100;那么这个a它只能是代表一个值,并无法把它当作一个对象来操作。
而装箱就是把 值类型变成引用类型的一个过程,拆箱就是把一个引用类型重新变成值类型的过程。只有装过箱的才能拆箱
jdk5以前是需要手动装箱拆箱的:
演示:手动装拆箱
public class test1 {public static void main(String []args){int a = 100;//手动装箱Integer integer = new Integer(a);//第一种Integer integer1 = Integer.valueOf(a);//第二种System.out.println(integer);//输出100System.out.println(integer1);//输出100//手动拆箱int b = integer.intValue();System.out.println(b);//输出100}
}
运行结果:
100
100
100
由运行结果可以看出,所谓装箱拆箱,就是把一个基本类型变成引用类型的,然后又从引用类型变成基本类型的一种方式。
之所以要这样玩,是为了可以使用引用类型的方法等等…,但所保存的值是不会变化的
jdk5以后就是自动装拆箱了
演示:
public class test1 {public static void main(String []args){int a = 100;//自动装箱Integer integer = a;//其实底层还是使用Integer的方法实现的只不过省略了System.out.println(a);//自动拆箱int b = integer;System.out.println(b);//同理也是使用的方法,但是省略了}
}
运行结果:
100
100
其他的包装类也是类似的
Double d = 100d;
Float f = 1.5f;
正确,对包装类的自动装箱 等同于调用包装类的valueOf();方法
Object obj = true? new Integer(1) : new Double(2.0);
System.out.println(obj);
三元运算符,当为真是走第一个 为假时走第二个 所以走new Integer(1),而又因为当两种数据类型在进行比较时,会自动转换成比较大的类型,所以 1 会变成1.0,输出结果1.0
Object obj2;
if(true){
obj2 = new Ineger(1);
}else{
obj2 = new Double(2.0);}
System.out.pritln(obj2)
布尔值为真,走obj2 = new Ineger(1);这里是向上转型,所以输出 1
把Intger类型转成String类型
public class test1 {public static void main(String []args){Integer n1 = 12345;String s1 = n1.toString();// 第一种使用toString方法System.out.println(s1);String s2 =String.valueOf(n1);//第二种 使用valueOf方法System.out.println(s2);String s3 = n1+" ";System.out.println(s3);//第三种使用+" "}
}
String 类型转成 Intger
public class test1 {public static void main(String []args){String s1 = "234";Integer i = new Integer(s1);//第一种使用默认自动装箱System.out.println(i);Integer i2 = Integer.valueOf(s1);//第二种 使用valueOf方法System.out.println(i2);}
}
1.看以下代码输出什么
Integer i = new Integer(1);Integer j = new Integer(1);System.out.println(i == j);Integer m = 1;Integer n = 1;System.out.println(m == n);Integer x = 128;Integer y = 128;System.out.println(x == y);
首先看第一个 ,由于 i和j都是new出来的对象,所以==用在比较对象时比较的是地址,所以是第一个输出false
第二个是自动装箱等同于调用valueOf(int x)方法,在这个方法的源码中如果传递进来的值>= -128 且 <= 127时就直接返回值
如果超出这个范围就new一个Intger对象保存。而1在这个范围之内,所以不会返回对象,因为输出true
第三个,同理还是会调用valueOf(int x)方法,但由于128超出了valueOf(int x)里规定的范围所以会返回创建对象,因为又是对比地址,所以返回false,
2.下列代码会输出什么
Intger a = 127;
int b = 127;
System.out.println(a == b);
Intger c = 128;
int d = 128;
System.out.println(c == d);
在 == 的对比中,如果是基本类型和和基本类型的包装类进行对比,那么就是值对比
所以两个都是true;
上一篇:CMake中install的使用
下一篇:七段显示译码器