背景

最近被一个问题难倒:问到Java的基本数据类型有8种,具体是哪几个?一起复习下:

Java数据类型概述

变量就是申请内存来存储值,即当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。

Java两大数据类型:内置数据类型/基本数据类型、引用数据类型

  • 基本数据类型:都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间;
  • 引用数据类型:引用类型继承与Object类,引用(即指针)是存储在有序的内存栈上,而对象本身的值存储在内存堆中。

内置数据类型/基本数据类型(8种)

  • 整数型(4种):byte、short、int、long、
  • 浮点型(2种):float、double
  • 字符类型(1种):char
  • 布尔类型(1种):boolean

具体如下:

类型概述范围默认值作用例子
byte8位、有符号,以二进制补码表示的整数-2^7 ~ (2^7-1),即 -128 ~ 1270byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int的四分之一;例子:byte a=-2
short16位,有符号,以二进制补码表示的整数-2^15 ~ 2^15-1, 即 -32768 ~ 327670short占用空间是int的二分之一例子:short s=-20000
int32位、有符号,以二进制补码表示的整数-2^31 ~ 2^31-10一般整数型默认为int类型;例子:int=-200000
long64位、有符号,以二进制补码表示的整数-2^63 ~ 2^63-10L主要使用在需要比较大整数的系统上例子:long a=10000L
float32位、单精度,浮点数浮点数不能用于表示精确的值0.0f在存储大型浮点数组的时候可以节省内存空间例子:float f1=0.3f
double64位、双精度,浮点数double也不能表示精确的值0.0d浮点数的默认类型为double类型例子:double d1=12.3
boolean表示一位的信息取值:true/falsefalse只作为一种标志类记录 true/false 情况例子:boolean one=true
char是一个单一的16位Unicode字符\u0000(即0)~\uffff(65,535)'\u0000'char可以存储任何字符例子:char letter='A'

引用数据类型(3种)

  • 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时候被指定为一个特定的类型,声明之后不能改变。
  • 引用数据类型包括:类(对象)、接口、数组。
  • 所有引用类型默认值都是null.
  • 一个引用变量可以用于引用任何与之兼容的类型。