java代码拆箱和装箱 java中拆箱是指将引用数据类型的对象转为基本数据类型

云南java培训学校告诉你软件测试中null是什么样的状态?我们在上文中给大家简单介绍了一下关于自动化单元测试的一些基本测试方法与运行的原理 , 今天我们就来了解一下,在测试环节中的一些特殊类型 。
null是一个非常非常特殊的类型,对于每一个测试人员都要十分小心null的存在的可能性 。同时null也让很多RD头疼,甚至连Java的设计者都成人null是一个设计失误 。这篇文章,测者想聊聊这个让很多人不喜欢的null 。
null到底是怎样的存在
在Java中有基本类型和引用类型,但是null却不属于上述两种,我们即不能声明一个变量为null类型,也不能将变量转换为null 。null的引用是一种null正确的表达方式 。但是null却可以转换成任何一种引用类型 。
null的一些细节注意点
null的装箱拆箱的细节
先说一个Java的概念:装箱和拆箱
上面的代码清洗的解释了装箱和拆箱的过程,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型 。
但是如果任何一个包装器类型在拆箱的时候都会包NPE异常(空指针异常) 。
布尔运算
null很特别,但是可以而且仅可以做布尔运算 。
null==null的结果是true , 但是云南IT培训认为这里面特别注意:如果是两个null的引用变量那么先要保证两个引入变量的类型完全一致 。运算结果才会是true 。
String类型转换
上面的代码的输出:nulss 。String转换后的null可以进行字符串运算,这是因为字符串进行连接的时候,编译器对null进行了特别的优化 。
什么是java中的自动装箱和自动拆箱【java代码拆箱和装箱 java中拆箱是指将引用数据类型的对象转为基本数据类型】java自动装箱和拆箱
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法 。
装箱:将基本类型转换成包装类对象
int i=10;
Integer x=new Integer(i);手动装箱
Integer y=10;自动装箱
拆箱:将包装类对象转换成基本类型的值
Integer j=new Integer(8);
int m=j.intValue();//手动拆箱
int n=j;//自动拆箱
java为什么要引入自动装箱和拆箱的功能?又是怎么实现的呢?
主要是用于java集合中,ListInteter list=new ArrayListInteger();
list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象 。
实现原理:javac编译器的语法糖
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
在通过Integer.valueOf()方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用(位于堆对象池中);否则创建一个新的Integer对象(创建在java堆中) 。上面的代码中i1和i2的数值为100 , 因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一个对象,而i3和i4则是分别指向不同的对象 。
public class Main {
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果为:false false
为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现呢?很简单:在某个范围内的整型数值的个数是有限的 , 而浮点数却不是 。
public class Main {

推荐阅读