本系列是“重学Java”,其中有些过于基础部分可能会一笔带过,本系列主要作用在于提取重要及精华。
首先,Java是一门面向对象的语言,一切皆为对象。不过,凡是都有特例。。。
Java两大数据类型:
1. 内置数据类型(基本数据类型)
2. 引用数据类型(对象)
基本数据类型
Java语言提供了八种基本数据类型,其中包括四种整型(byte、short、int、long),两种浮点型(float、double),布尔类型(boolean)和字符型(char)。详细见下图:
引用数据类型
也就是常说的对象。引用类型通常由变量指向对象的内存地址,并且所有对象默认值都为null。
引用类型在被创建时,首先要给其引用(变量)在栈分配一块内存,而对象的具体信息都存储在堆中,然后将引用指向对象。
自动拆箱与自动装箱
每一种基本类型都对应其引用类型,并且可以相互转换,这些转换的过程,就叫做拆箱与装箱。在jdk5之前,必须自己手动进行操作,比如Integer value = new Integer(10); //或者这样做 Integer value = Integer.valueOf(10);而在jdk5之后,你可以直接这样定义:Integer value = new Integer(10); int i = value;其中转换的过程由编译器帮你完成了,在虚拟机实际执行的代码中,还是有拆箱与装箱这一过程
简易实现
在八种包装类型中,都提供了两种种方法来直接转换:
静态方法valueOf(基本类型):将基本类型直接转换为对应的包装类型(此转换过程中也会涉及数据类型的自动转换)
实例方法xxxValue():将具体的包装类型对象转换成基本类型,此方法可以实现6种任意数字类型的强制转换。
自动装箱与拆箱中的“坑”
自动拆箱与自动装箱存在复用情况,总结如下:
(1)Integer默认复用了[-128,127]这些对象,其中高位置可以修改;
(2)Byte复用了全部256个对象[-128,127];
(3)Short服用了[-128,127]这些对象;
(4)Long服用了[-128,127];
(5)Character复用了[0,127],Charater不能表示负数;
Double和Float是连续不可数的,所以没法复用对象,也就不存在自动装箱复用陷阱。
网友评论