Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。JAVA数据类型

整数类型用来存储整数值,即没有小数部分的数值,可以是正数、负数,也可以是零。根据所占内存的大小不同,可以分为:整数类型

在对long型进行赋值时在结尾必须添加“L”或者“l”,如果不加,系统自动将其定义为int型变量。"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

4种整数类型在java程序中有3种表现形式,分别为:

1. 十进制表示法。十进制的表现形式都很熟悉,即逢十进一,每位上的数字最大是9。

2. 八进制表示法。八进制即逢八进一,每位上的数字最大是7,且必须以0开头。

3. 十六进制表示法。中国古代使用的就是十六进制数,所谓半斤八两就是如此,逢十六进一,每位上最大数字是f(15),且必须以0X或0x开头。

浮点类型表示有小数部分的数字。在Java语言中,浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围:浮点类型

在对float型进行赋值时在结尾必须添加“F”或者“f”,如果不加,系统自动将其定义为double型变量。

char型即字符类型,使用char关键字进行声明,用于存储单个字符,系统分配两个字节的内存空间。在定义字符型变量是,要用单引号括起来,且单引号中只能有一个字符,java 内部使用Unicode字符集,有一些转义字符。

布尔类型又称逻辑类型,只有true和false两个值,分别代表布尔逻辑中的“真”和“假”。使用boolean关键字声明布尔类型变量,通常被用在流程控制中作为判断条件。

基本数据类型的类型转换

基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代码的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。

当一个数值范围小的类型赋给一个数值范围大的数值型变量,jvm在编译过程中将此数值的类型进行了自动提升,叫做自动类型转换(隐式转换)。在数值类型的自动类型提升过程中,数值精度不会降低(整型保持不变,float->double精度将变高)。

当数值范围较大的数值类型赋给数值范围较小的数值类型变量时,由于此时可能会丢失精度,因此,需要人为进行转换。我们称之为强制类型转换(显式转换)。

Java包装类

Java不仅支持上述8种基本数据类型,还为这8种基本数据类型提供了对应的包装类,通过这些包装类,我们就可以将上述基本数据类型当做Java中的类对象来处理了。值得说明的是,Java程序中可以直接操作基本数据类型,但是某些情况下需要将它们看成对象来处理,这些情况下就需要借助于Java API中基本数据类型对应的包装类来处理了。

作用:Java中的基本类型不是面向对象的,它们只是纯粹的数据,除了数值本身的信息之外,基本类型数据不带有其他信息或者可操作方法。这在实际使用中存在很多不足,为了解决这个不足,对每个基本类型都对应了一个引用的类型,称为装箱基本类型。

short → Short、int → Integer、long → Long、char → Character、byte → Byte、float → Float、boolean → Boolean、double → Double

实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类Void,不过无法直接对它们进行操作。

装箱:根据数据创建对应的包装对象。

Integer i = new Integer(3);
Integer j = 4;//jdk1.5 之后可以通过这种方式自动装箱

拆箱:将包装类型转换为基本数据类型。

int index2 = j.intValue();
int index1 = i;//自动拆箱

基本数据类型和包装类型的区别——

1. 包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是;

2. 包装类型是引用的传递,基本类型是值的传递;

3. 声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间;

4. 存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们,因此,包装类的效率会比基本数据类型的效率要低。

5.初始值不同,比如:int的初始值为0、boolean的初始值为false,而包装类型的初始值为null;

6. 使用方式不同,基本数据类型直接赋值使用就好,而包装类型是在集合,比如Collection、Map时会使用。

对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。

public class PrimitiveTypeTest{
public static void main(String[] args) {
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE + "\n");
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE + "\n");
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE + "\n");
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE + "\n");
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE + "\n");
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE + "\n");
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE和Character.MAX_VALUE输出到控制台 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);
}
运行结果:
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535

Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少次方。