1 前言
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
Java支持八种基本数据类型,包括一种布尔类型、一种字符类型、一种数值型,包括四种整数类型和两种浮点数类型。
2 布尔类型
boolean
数据类型表示一位的信息;- 只有两个取值:
true
和false
; - 这种类型只作为一种标志来记录
true/false
情况; - 默认值是 false;
- 例子:
boolean b = true2
3 字符类型
- char 类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(十进制等效值为 0);
- 最大值是 \uffff(即为 65535);
- char 数据类型可以储存任何字符;
- 例子:
char c = 'A';
4 值类型
4.1 byte
- byte 数据类型是8位、有符号的,以二进制补码表示的整数;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1);
- 默认值是 0;
- byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
- 例子:
byte b = 100;
4.2 short
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
- 默认值是 0;
- 例子:
short short s = -10000;
4.3 int
int
数据类型是32位、有符号的以二进制补码表示的整数;- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1);
- 一般地整型变量默认为 int 类型;
- 默认值是 0 ;
- 例子:
int a = 100000;
4.4 long
long
数据类型是 64 位、有符号的以二进制补码表示的整数;- 最小值是 -9,223,372,036,854,775,808(-2^63);
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 这种类型主要使用在需要比较大整数的系统上;
- 默认值是 0L;
- 例子:
long l = 100000L;
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
4.5 float
float
数据类型是单精度、32位、符合IEEE 754标准的浮点数;float
在储存大型浮点数组的时候可节省内存空间;- 默认值是 0.0f;
- 浮点数不能用来表示精确的值,如货币;
- 例子:
float f1 = 234.5f;
4.6 double
double
数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;- 浮点数的默认类型为 double 类型;
- double类型同样不能表示精确的值,如货币;
- 默认值是 0.0d;
- 例子:
double d5 = 12.9867;
5 码农来洞见
5.1 类型转换
Java允许整数和浮点数之间互相转换。并且,由于每个字符都对应Unicode编码中的一个数字,所以char
与整数和浮点数之间也可以相互转换。事实上,在Java中,boolean类型是唯一一种不能跟其他基本类型相互转换的基本类型。
自动类型转换:
也叫隐式类型转换,其实就是小范围的数据类型向大范围的数据类型转换(byte ->short(char)->int->long->float->double)
。
强制类型转换:
也叫显式类型转换,是从存储范围大的类型到存储范围小的类型(double→float→long→int→short(char)→byte)
。强制类型转换所带来的结果是可能会丢失精度,如果此数值尚在范围较小的类型数值范围内,对于整型变量精度不变,但如果超出范围较小的类型数值范围内,很可能出现一些意外情况。
int i = 223;
byte b = (byte) i;
上面的例子中输出值是-23.
为什么结果是-23?需要从最根本的二进制存储考虑。
233的二进制表示为:24位0 + 11101001,byte型只有8位,于是从高位开始舍弃,截断后剩下:11101001,由于二进制最高位1表示负数,0表示正数,其相应的负数为-23。
数据类型自动提升:
数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储。如:byte类型的变量占用8位,int类型变量占用32位等。相应的,不同的数值类型会有与其存储空间相匹配的取值范围。
在Java中,整数类型(byte/short/int/long)
中,对于未声明数据类型的整型,其默认类型为int型。在浮点类型(float/double
)中,对于未声明数据类型的浮点型,默认为double型。
5.2 存储空间
注意事项1:
如果需要一个占位符来存储数字1000000,那么需要一个int型数,long可以用于存储更大的数字,读者可能问,既然long可以包含比byte和int型数更大的数字,为什么不总是使用long呢?这是因为long需要64位,相比byte
或int,这会占用更多的内存空间。因此,为了节省空间,需要选择合适的基本类型。
注意事项2:
将一个int型的1000赋给一个byte型的变量a,提示出错,但是最后一句:将一个int型的3赋给一个byte型的变量c,居然编译正确,这是为什么呢?
byte b1 = 1000;
byte b2 = 3;
原因在于:jvm
在编译过程中,对于默认为int类型的数值时,当赋给一个比int型数值范围小的数值类型变量,会进行判断,如果此int型数值超过数值类型,那么会直接编译出错。但是如果此int型数值尚在数值类型范围内,jvm会自动进行一次隐式类型转换。
到此这篇关于Java基础-Java基本数据类型的文章就介绍到这了,更多相关Java基本数据类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!