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


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
关于java的装箱和拆箱的问题装箱就是把基础类型封装成一个类 。比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了 。拆箱就是把类转换成基础类型 。比如你算个加法什么的是不能用类的,就得把它转换成基本类型,jdk5以后已经可以自动转换了貌似 。基本类型你应该懂的吧,就那八种
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,是缓存中同一个对象
欢迎修改补充...
java 为什么要有装箱和拆箱?把一个基本类型包装成一个类,一个是可以使这个类型具有很多可以调用的方法 。二个是Java向面像对象语言的靠近 。其实Java还不算是很纯的面向对象的语言 。真正的面向对象,是没有基本数据类型的 。它只有一种类型,就是对象 。三个是在泛型中,基本类型是不可以做泛型参数的 。如:List int list = new ArrayListint ();这是不合法的 。你只能这个样写ListInteger list = new ArrayListInteger ();也就是要用int型的包装类类型来解决基本类型不可以做泛型参数的问题。
一名话,包装类有更多的方法和用途,而这是基本类型没有的?。。?
java包装类怎样理解?装箱与拆箱又怎样理解?请通俗的解释一下,举个例子也行Java有一个类型系统有两个部分组成java代码拆箱和装箱,包含基本类型(byte、char、int、short、long、float、double、boolean)和引用类型 。而基本类型则对应着各自java代码拆箱和装箱的引用类型java代码拆箱和装箱,称为装箱的基本类型 。而引用类型对应着各自的基本类型java代码拆箱和装箱,称为拆箱的基本类型 。对应的类型为java代码拆箱和装箱:(Byte、Character、Integer、Short、Long、Float、Double、Boolean)

推荐阅读