
正文
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进行了特别的优化。
相关问答
Q1: 什么是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 {
public static void main(String[] args) {
Boolean i1 = false;
Boolean i2 = false;
Boolean i3 = true;
Boolean i4 = true;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果为:true true
至于为什么是这个结果,同样地,看了Boolean类的源码也会一目了然。下面是Boolean的valueOf方法的具体实现:
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
public class H {
public static void main(String[] args) {
Integer m=10;
int n=10;
System.out.println(m==n);
}
}
//结果为:true
Q2: 关于java的装箱和拆箱的问题
装箱就是把基础类型封装成一个类。比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了。拆箱就是把类转换成基础类型。比如你算个加法什么的是不能用类的,就得把它转换成基本类型,jdk5以后已经可以自动转换了貌似。基本类型你应该懂的吧,就那八种
Q3: java什么时候触发装箱和拆箱
最近面试也遇到了这个问题java代码拆箱和装箱,思考总结了一下。
装箱:在基本类型的值赋值给包装类型时触发。例如:Integer a = 1;
这时二进制文件中实际上是Integer a = Integer.valueOf(1);
拆箱:
1. 在包装类型赋值给基本类型时触发。
例如:Integer a = 1; // a 是Integer类型
int b = a; // 将Integer类型赋值给int类型java代码拆箱和装箱,触发拆箱
2.在做运算符运算时触发。
例如:
Integer a = 1;
Integer b = 2;
System.out.print(a * b); //这时a*b在二进制文件中被编译成a.intValue() * b.intValue();
注意点:
==运算时,如果 a 和 b 都是Integer类型,则不会拆箱,因为==也可以直接比较对象,表示a和b是否指向同一对象地址。因此这里并不是比较值是否相等了。而如果a 和 b 中有一个是int类型,另一个是Integer 类型,则会触发拆箱,然后对两个int值进行比较。
Integer a = 128;
Integer b = 128;
Integer c = 127;
Integer d = 127;
System.out.print(a == b); // 返回false
System.out.print(c == d); // 返回true
原因是Integer 的装箱(Integer.valueOf())方法会自动缓存-128~127之间的值,多次装箱同一个值实际上用的是同一个对象,因此这里 a == b 是false,因为不是同一个对象,而 c==d 是true,因为使用缓存中的同一个对象,而不是因为值相等。
Integer a = 127;
Integer e = new Integer(127);
Integer f = Integer.intValue(127);
System.out.println(a == e); // 返回false,不是同一个对象
System.out.println(a == f); // 返回true,是缓存中同一个对象
欢迎修改补充...
Q4: java 为什么要有装箱和拆箱?
把一个基本类型包装成一个类,一个是可以使这个类型具有很多可以调用的方法。二个是Java向面像对象语言的靠近。其实Java还不算是很纯的面向对象的语言。真正的面向对象,是没有基本数据类型的。它只有一种类型,就是对象。三个是在泛型中,基本类型是不可以做泛型参数的。如:List int list = new ArrayListint ();这是不合法的。你只能这个样写ListInteger list = new ArrayListInteger ();也就是要用int型的包装类类型来解决基本类型不可以做泛型参数的问题 。
一名话,包装类有更多的方法和用途, 而这是基本类型没有的!!!
Q5: java包装类怎样理解?装箱与拆箱又怎样理解?请通俗的解释一下,举个例子也行
Java有一个类型系统有两个部分组成java代码拆箱和装箱,包含基本类型(byte、char、int、short、long、float、double、boolean)和引用类型。而基本类型则对应着各自java代码拆箱和装箱的引用类型java代码拆箱和装箱,称为装箱的基本类型。而引用类型对应着各自的基本类型java代码拆箱和装箱,称为拆箱的基本类型。对应的类型为java代码拆箱和装箱:(Byte、Character、Integer、Short、Long、Float、Double、Boolean)
下面一具体例子来说明装箱与拆箱
//java 1.5之前创建一个Integer对象Integer i = new Integer(10);//java 1.5之后有了装箱的特性,直接用下列方式生成一个Integer对象//在这个过程中会将int 类型的10自动装箱成为Integer类型Integer i = 10;//拆箱 输出的值为20,这个过程中,会先将Integer类型的j自动拆箱为基本类型的10,最后完成运算Integer j = new Integer(10);int k = 10;
System.out.print(j+k);
关于java代码拆箱和装箱和java中拆箱是指将引用数据类型的对象转为基本数据类型的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







