装箱:就是将基本的数据类型转换为对象的过程。拆箱就是将对象转换为基本的数据类型的过程,还是来看看代码吧。截图如下.
/**
* @author hackbase 来看看Java的自动拆箱和自动装箱的操作.
*/
public class Packing {
public static void main(String[] args) {
/**
* 今天我们来说说java里面的拆箱和装箱的操作.l
* 拆箱和装箱是基本数据类型和包装类的转换.
* 那么为何要将基本数据类型装箱了我们自导java是一门面向
* 对象的语言,那么基本数据类型不具备面向对象的特点
* 用在实际的开发里面是非常的不方便的,所以要将基本的数据类型
* 封装成为包装类。将基本数据类型转换为对象的过程称之为装箱的操作
* 反过来将包装的对象转换为基本的数据类型类型的过程称之为拆箱,.
* 那么Java里面白装类有哪些了。
* 来看看包装类。 Itegern堆基本的整形的数据的包装的一个类.
*
* Double----->double浮点数
* Float------->float
* Integer------>int
* Boolean----->boolean
* Byte---------->byte
* String---------->string
* 等等来看看下面的代码吧
*/
System.out.println("--------Integer-------");
//输出Inter包装类的最大数值.
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.TYPE);
System.out.println(Integer.max(12, 34));
//从输出的结果97可以看到该方法是输出该字符的 Anscii编码。也就是
//数值和字符是没有却别的,只是表现形式不一样而已.
System.out.println(Integer.valueOf('a'));
//常见包装类的对象
Integer a = new Integer(12);
Integer b = new Integer(12);
System.out.println(a.equals(b));
//equals方法是object对象的方法,所以看到a和b现在已经是一个对象了。
System.out.println(a.getClass());
System.out.println(a.compareTo(b));
//获取包装类的int数值.
System.out.println(b.intValue());
System.out.println(b.doubleValue());
System.out.println("-------Double-------->");
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
System.out.println(Double.MIN_NORMAL);
System.out.println(Double.SIZE);
System.out.println(Double.TYPE);
//其他包装类型的就在这里不多说了。和上面的基本是差不多的,现在我们来看看
//自动拆箱:就是将包装类的对象自动转换为基本的数据类型
//自动装箱就是将基本的数据类型转换为包装类的对象的过程。在Java里面装箱和拆箱
//的操作如下代码;
System.out.println("--------StringTest------");
//手动装箱
String test3 = new String("123");
System.out.println(test3.hashCode());
//手动拆箱是通过调用方法来实现的。
String test4 = test3.valueOf(test3);
System.out.println(test4);
//在来看看下面的代码
System.out.println("--------test7------>>>>");
Integer datatest = new Integer(1000);
//输出的结果可以看到就是i一个对象了。这个就是手动装箱的操作.
System.out.println(datatest.getClass());
//手动拆箱的操作.Integer包装类的手动拆箱和手动装箱的操作.
int rq = datatest.intValue();
System.out.println("------自动装箱和拆箱的操作------->>>");
Integer i = 100;
//自动装箱
//自动拆箱的操作.
int temp = i;
/**上面的代码,是如何事项自动拆箱和自动装箱的擦做了,这背后JVM就会帮助我么完成自动拆箱和自动装箱的
* 操作.简单的来说装箱就是将基本的数据类型转换为包装器类型拆箱 就是将包装的数据雷响 转换为基本的数据类型
* 来看看Javad的包装类型.
*
* int----->Integer
* boolean---->Boolean
* byte------->Byte
* short------>Short
* long-------Long
* float----->Float
* double------Double
* char-------->Chattaer
*
*/
/**
* 下面我们来看看装箱和拆箱是如何实现的。在java虚拟机里面.
* 从反编译得到的字节码内容可以看出,在装箱的时候自动调用的是Integer的valueOf(int)方法。
* 而在拆箱的时候自动调用的是Integer的intValue方法。
*
* 其他的也类似,比如Double、Character,不相信的朋友可以自己手动尝试一下。
*
* 因此可以用一句话总结装箱和拆箱的实现过程:
*
* 装箱过程是通过调用包装器的valueOf方法实现的,
* 而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
*
*/
/**
*
* 面试中的 相关问题.来看看下面的代码.
*/
System.out.println("-----Demo----->>>");
Integer t1 = 100;
Integer t2 = 100;
Integer t3 = 20000000;
Integer t4 = 20000000;
System.out.println(t1.equals(t2));
System.out.println(t3.equals(t4));
//从结果可以看出的就是t1和t2指向的都是同一个对象.同理t3和t4也是一样的。都指向的是同
//一个对象,但是要注意的是假如,这个数值超出基本类型的取值范围的话,比如后面的代码
//在某些编译器上面是报错的。但是后续Java的版本是一样的,两个输出的 结果都为真.在来看看
//equals比较的话,两个都为真,都是指向内存中的 同一个对象.但是包装类型不能使用等号来进行比较
//如果可以的话,后面一个结果输出的结果为假。因为数据超出基本数据的范围。在源码就直到,输出结果为假。
//下面的代码
System.out.println("------Double Test---->>>");
Double r1=100.0;
Double r2=100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(r1.equals(r2));
System.out.println(i3.equals(i4));
/**
* 他们虽然都是指向的通同一个引用。因此他们的equals方法的 返回值都是i一样的。结果都为true
* 在idea编辑器里面,不能使用等号来比较。
*/
}
}