基本数据类型
首先知道java中的基础数据类型,Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型,包括:byte,short,int,float,long,double,boolean,char
其中:
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte:
byte 数据类型是8位、有符号的,以二进制补码表示的 ** 整数 **;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
例子:byte a = 100,byte b = -50。
short:
short 数据类型是 16 位、有符号的以二进制补码表示的 **整数**
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;
例子:short s = 1000,short r = -20000。
注意前面两个基本类型都是可以节省整数存储空间的
int:
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
例子:int a = 100000, int b = -200000。
long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是 0L;
例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f。
注意float和long都显示有标注符L和f
double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:double d1 = 123.4。
boolean:
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。
char:
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
例子:char letter = 'A';。
包装类型
对应的包装类型:Byte,Short,Integer,Long,Float,Double,Boolean,Character,
两种类型区别:
为甚有基本类型:Java编程思想是万物皆对象,我们new一个对象是通过堆栈的引用来使用这些对象,对于经常用到的int,float,double等变量,如果用new来申请,就会将他们存入一个堆中,这样做法就不是很高效。所以就出现了基本类型,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效。
包装类型:但Java是一个面向对象的语言,基本类型并不具有对象的性质,为了与其他对象“接轨”就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。参考
拆箱和装箱
装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。
//装箱
Integer i = new Integer(10);//JDK1.5之前是不支持自动装箱和自动拆箱的,必须这样定义
Integer i = 10;//JDK1.5开始,提供了自动装箱的功能。装箱是通过调用包装器类的 valueOf 方法实现的,也就是代码也可以写为(Integer i=Integer.valueOf(10);)
//拆箱
int n = i;//拆箱是通过调用包装器类的 xxxValue 方法实现的,这里也就是也可以写为(int n=i.intValue())
包装类型和基本类型的==操作和equal()操作参见
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i3==i4); //打印false
注意jvm在运行时创建了一个缓存区域,并创建了一个integer的数组。这个数组存储了-128至127的值。因此如果integer的值在-128至127之间,则是去缓存里面获取。因此上面的i3和i4指向的是同一个内存地址。而200超过了这个缓存区域,因此这样赋值的时候是重新开辟了两个内存地址,所以内存地址不再相同,所以不等。
== 的作用:
基本类型:比较值是否相等
引用类型:比较内存地址值是否相等
equals 的作用:
引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。