JAVA语言中提供引用类型和原始类型(或内置类型)两种不同的类型。
在JAVA语言中定义了8种基本的数据类型:byte,short,int,long,float,double,boolean。它们都属于原始类型。而Java为每个原始类型提供的包装类Byte,Short,Integer,Long,Float,Double,Character,Boolean都属于引用类型。原始类型和引用类型的区别是什么?简单来说他们在Java虚拟机存储方式不同,原始类型在操作堆栈中存储的数值,而引用类型对应的堆栈项并不是对象本身,而只是一个对象的引用,也就是对象真正所在内存的地址。因此我们也就不难理解,Java声明一个对象时并没有真正的创建一个对象,只是创建了一个引用;而当我们声明原始类型时直接会生成一个具有默认值的类型,这个类型本身也声明了存储。
Java语言是一个纯面向对象的语言,但为什么Java中的基本数据类型却是不面向对象的。其实从上面的说明不难看出,基本数据类型的包装类是引用类型,但我们从存储过程不难看出,引用类型的使用在程序调用上绝对没有原始类型快,因为基本类型很常用,引入原始类型可以大大提高Java程序的执行效率。但是既然有了基本类型又为什么还有提供了基本数据类型的包装类,很好理解Java中的基本数据类型不面向对象的,它在数据转换,数据处理时不是很方便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的包装类。包装类在处理封装原始类型数据之外,还包含了很多与该原始类型相关的方法。如将int转化为string,取得int类型的最大最小值,判断一个字符是不是空白字符,得到它的码值等多个方法。而且有些数据结构如ArrayList,HashMap等不能存放原值类型,这时只能使用其包装类8个基本数据类型的储存方式和数值范围。
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:长度由具体的JVM决定,只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
变量类型的声明和初始化
boolean 默认值 false;
byte,short,int,long 默认值都是 0;
float,double 默认值都是 0.0;
char 默认值 \u0000;
对象 默认值 null。
值得注意的:
1.声明一个float类型的值,必须以f或F为后缀,否则会被当作double类型,对于double类型声明后缀d或D是可选的。
2.Java中的局部变量都必须初始化。