Java 数据类型总结
Java 语言是强类型语言 (strongly typed language)。其含义在于:
- 变量必须先声明再使用
- 指定类型的变量只能接受与其类型匹配的值
这就意味着,变量和表达式在编译时就都有一个确定的类型,这个类型限制了变量能被赋的值、限制了表达式可以产生的值。
编程的本质就是对内存中数据的访问和修改。程序所用的数据都会保存在内存中,程序对变量赋值,实际上就是把数据装入该变量所代表的内存区的过程,程序读取变量的值,实际上就是从该变量所代表的内存区取值的过程。每个变量都代表了某一小块内存,它相当于一个有名字的容器。
类型分类
基本类型
- boolean类型
- 数值类型(整数类型 \ 浮点类型)
整数类型: byte short int long char
浮点类型:float double
【char 代表字符类型,实际上字符型也是一种整数类型,相当于无符号整数类型】
引用类型
- 类
- 接口
- 数组
【所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是 Java 语言里不再使用指针这个说法。】 - 空类型(null type)实际开发可以忽略这种类型,此处不做介绍。
##############################################################################################
详细介绍
- byte: 内存中占 8 位,表数范围: -128 ~ 127,最高位为符号位。
- short: 内存中占 16 位,表数范围: -32768 ~ 32767,最高位为符号位。
- int: 内存中占 32 位,表数范围: -2147483648 ~ 2147483647,最高位为符号位。
- long: 内存中占 64 位,表数范围: -2e63 ~ 2e63 - 1,最高位为符号位。
- char: 相当于一个 16 位无符号整数,表数范围:0 ~ 65535
- float: 代表单精度浮点数。内存中占 32 位。第1 位是符号位,接下来 8 位表示指数,再接下来 23 位表示尾数。
- double: 代表双精度浮点数。内存中占 64 位。第 1 位是符号位,接下来 11 位表示指数,再接下来 52 位表示尾数。
- boolean: Java 规范没有强制指定 boolean 类型的变量所占的内存空间。由于大部分计算机在分配内存时允许分配的最小内存单元是 8 位 1 字节,因此 大部分时候实际是占用 8 位的。
【Java 语言的浮点类型默认是 double 类型,如果希望 Java 把一个浮点类型值当成 float 类型处理,应该在这个浮点类型值后紧跟f或F,个人建议最好用大写F。同理用d或者 D 强制指定 double 类型,但通常没必要。】
PS: Java 还提供了三个特殊的浮点数值:正无穷大(POSITIVE_INFINITY)、负无穷大(NEGATIVE_INFINITY)、非数(NaN),用于表示溢出和出错。
需要注意,所有的正无穷大数值都是相等的,所有的负无穷大数值都是相等的,而 NaN 不与任何数值相等,甚至和 NaN 都不相等。
其他:
数值中使用下划线分隔
为了避免数值位数太多,让人看起来眼花,Java7 中引入了一个新功能:允许在数值中使用下划线,不管是整数类型还是浮点数类型,都可以使用
public class UnderscoreTest
{
public static void main(String[] args){
int binValue = 0B1000_0000_0000_0000_0000_00001;
double pi = 3.14_1592_6535;
double x = 1234_67.89;
}
}