从新开始学JAVA - 数据类型6
数据类型
Java的数据类型有两大类
- 基本类型(primitive type)
- 基本类型都属于关键字
- 基本类型的默认值为:
- 整数:
0 - 浮点数:
0.0 - 布尔值:
false
- 整数:
- 引用类型(reference type)
- 类
- 接口
- 数组
- 非基本类型的默认值全部是
null
具体分类
基本类型又可以细分为以下类型
- 数值类型
- 整数类型
- byte
- 占1个字节
- 范围:
-128~127(2(-7)~27-1)
- short
- 占2个字节
- 范围:
-32768~32767(2(-15)~215-1)
- int
- 占4个字节
- 范围:
-2147483648~2147483647(2(-8)~28-1)
- long
- 占8个字节
- 范围:
-9223372036854775808~9223372036854775807(2(-63)~263-1) - 因为这个类型数值太大,所以一般如果使用了
long,则会在数值最后加一个L或者l,例如long number = 30L(或者30l);
- byte
- 浮点类型
- float
- 占4个字节
- 一般如果使用了
float,则会在数值最后加一个F或者f,例如float number = 50.1F(或者50.1f);
- double
- 占8个字节
- float
- 字符类型
- char
- 占2个字节
- 注意这里是字符,不是字符串,所以只能一个字符,例如
char name = 'a';,如果是char name = 'ab';那么就会报错。中文则是一个字就可以,两个或者以上的字就不行。符号则是一个符号就可以,两个或者以上就报错,例如char name = '+';就可以 - 字符串(
String)是一个类,不是基本类型,也不是关键字,属于引用类型 char使用单引号',String使用双引号"
- char
- 整数类型
- 布尔类型(boolean)
- 占1位(1 bit),因为其数值只有
true和false
- 占1位(1 bit),因为其数值只有
补充
- 所有的基本类型名字都是小写字母,所有的其他类型名字都是首字母大写,例如
char,String - 有一些基本类型会有对应的封装类,例如
Boolean就是基本类型boolean的封装类,具有属性和方法,是基本类型的实例化对象- 基本类型都不可以用
new来声明或者初始化,但其他类型的类可以,例如Boolean flag = new Boolean("true");,但不能boolean flag = new boolean("true");
- 基本类型都不可以用
- 位(bit):是计算机内部数据储存中最小单位,1位就能存储计算机语言中的一个
0或者1。例如11001100是一个八位二进制数。一般用b表示 - 字节(byte):1个byte(字节)即为8个bit(位),是计算机中处理数据的基本单位,一般用
B表示。1B = 8b - 电脑参数中经常提到的32位系统、64位系统,指的就是计算机的CPU单次可以处理数据的量,64位电脑表示该电脑单次可以处理8B(8byte,即64bit)的数据。高位电脑可以向下兼容(安装32位的软件、系统),但低位电脑不能向上兼容。主要区别如下
- 寻址能力不同:寻址能力简单点说就是支持的内存大小能力,64位系统最多可以支达128 GB的内存,而32位系统最多只可以支持4G内存
- 运算速度不同: 32位处理器一次只能处理4个字节的量,而64位一次可以提取64位数据,也就是8个字节的量,比32位提高了1倍
- 兼容性不同:32位操作系统只可以安装使用32位架构设计的软件,而64位的CPU既可以安装使用32位软件也可以安装使用64位软件
- 上面的整数类型中,byte占用1个字节,即8bit,所以系统会分配8个位置来储存这个数(例如00000001、01010010)。而计算机中,我们规定首位为符号位,即1代表负数,0代表正数,所以实际上只有7个位置来表达这个数的大小,所以范围是-128~127(2(-7)~27-1)。同理,short占2个字节,所以系统分配了16个位置来储存,而首位是符号位,所以数的大小的范围是-32768~32767(2(-15)~215-1)
- 因为
0这个数在二进制中是0000,但因为计算机规定了首位是符号位,所以就算我们人为定义0既不是正数,也不是负数,但在计算机中,0000的首位是0,其实是占用了正数的一个位置的,所以计算范围时,正数要比负数少1。例如,-2~2,中间其实有5个数,-2,-1,0,1,2。而因为是二进制,所以范围大小都是2的倍数,所以只能取-2,-1,0,1 - 进制
- 二进制
- 以
0b开头,例如0b11代表0000 0011,即3
- 以
- 十进制
- 八进制
- 以
0开头 int number = 010;,输出结果为8- 注意,因为是八进制,所以数字
8和9是不可使用的,会报错Integer number too large。也就是说在八进制中,数值0~7的表示是00~07,而8则直接变成010,同理,数值9~15的表示是011~017,而16则直接变成020
- 以
- 十六进制
- 以
0x开头 - 用
a~f来表示10~15,例如int number = 0xa,输出结果为10 - 计算方法:例如
int number = 0xa30f,则10(即a) * 16^3 + 3 * 16^2 + 0 * 16^1 + 15(即f) * 16^0 = 41743
- 以
- 二进制
- 浮点数
- 采用
IEEE 754标准 - 详细解释
- 浮点数占4个字节,即32位,
IEEE 754标准规定:- 首位为符号位,0表示正数,1表示负数
- 第2-9位表示指数
- 最后23位表示小数
- 浮点数的数值有舍入误差,所以千万不要用浮点数进行比较
- 可以使用
BigDecimal(一个数学工具类)来进行比较(应用于银行业务)
- 采用
- 字符
- 字符的本质还是数字,所有的字符都可以被强制转换成数字
- Java的默认编码是
Unicode,可以表达从0到65536(216)的数字,每个数字被规定好,表示不同的字符Unicode采用十六进制,范围从U0000到UFFFF- 十六进制中,
F或者f代表15,所以UFFFF即为15 * 16^3 + 15 * 16^2 + 15 * 16^1 + 15 * 16^0 = 65536
- 其他的编码还有
ASCII,以及Unicode拓展出来的UTF-8,UTF-16等 - 详细解释
- 转义字符(Escape Character)
\u代表使用Unicode,例如System.out.println('\u0061')会输出Unicode表格中数字97代表的字符(因为是十六进制,计算方法如上),即a\t代表Tab\n代表换行
- 基本类型的大小
byte(1字节)<short(2字节)=char(2字节)<int(4字节)<long(8字节)<float(4字节)<double(8字节)- 浮点数的范围大于整数,因为浮点数采用指数存放,具体可以看上方的链接
- 在基本类型的相互转换中,从大转换为小是自动转换,从小转换为大是强制转换,并且容易出现内存溢出

浙公网安备 33010602011771号