java中基本数据类型有以下8种:
6种数字类型:byte,short,int,long,float,double
1种字符类型:char
1种布尔类型:boolean
8种基本类型对应的包是:Byte,Short,Integer,Long,Float,Double,Character,Boolean
注意:
java中使用long类型必须在后面加上L,否则将作为int类型解析
对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
https://www.cnblogs.com/dolphin0520/p/3780005.html
自动拆箱:将包装类型转化为基本数据类型
自动装箱:将基本类型用他们的引用类型包装起来
下面详细解释以下拆箱和装箱的过程以及原理
装箱:
在Java SE5之前,如果要创建一个Integer对象,必须严格遵守创建对象的过程
1 Integer i = new Integer(10);
但是Java SE5之后,创建一个对象就可以使用更为简单的方式
1 Integer i=10;
这个过程就叫装箱,顾名思义,把一个数值装入到Integer对象中
拆箱:
顾名思义,就是把Integer对象中的数值提取出来,把包装器类型转化为基本数据类型
1 Integer i = 10; //装箱 2 int n = i; //拆箱
装箱时调用的是包装器的valueOf方法实现的,valueOf函数的参数就是包对应的基本数据类型的一个参数,返回值是包装器对象
拆箱时调用的是xxxValue方法实现的,如intValue,booleanValue....返回值就是对应的基本数据类型,没有参数。
1 Integer i1=new Integer(5); 2 Integer i2=Integer.valueOf(10); 3 int x1=i1.intValue(); 4 int x2=i2.intValue(); 5 System.out.println(x1); 6 System.out.println(x2);
下面这段代码的输出结果是什么?
1 public class Main { 2 public static void main(String[] args) { 3 4 Integer i1 = 100; 5 Integer i2 = 100; 6 Integer i3 = 200; 7 Integer i4 = 200; 8 9 System.out.println(i1==i2); 10 System.out.println(i3==i4); 11 } 12 }
答案是第一个是true,第二个是false(对于==,不同的对象结果是false,相同的对象结果是true)
其原因在于装箱时调用的valueOf()函数,Intger的valueOf(),如果值在-128到127之间,会先在cache中搜索有没有已经存在的对象,如果有,直接调用返回,所以i1和i2是同一个对象。而i3和i4是不同的两个对象。
对于不同的包,valueOf()的源代码不一样,比如Double的valueOf()函数,没有搜索范围内的值然后查找cache的过程,而是直接新建一个对象。
原文:https://www.cnblogs.com/wangqianming12138/p/14638557.html