java基本数据类型及运算的注意事项
一、基本数据类型
序号 | 类型 | 位数 | 范围 | 说明 |
整数类型 (最高位为符号位) | byte | 8位 | -128(-27)~127(27-1) | 默认类型为int 二进制0b开头 八进制0开头 十六进制0x开头 |
short | 16位 | -32 768(-215)~32 767(215-1) | ||
int | 32位 | -2 147 483 648(-231)~2 147 483 647(231-1) | ||
long | 64位 | -9 223 372 036 854 775 808(-263)~9 223 372 036 854 775 807(263-1) | ||
字符类型 | char | 16位 | 单字符、转义字符、Unicode | 例:'A',' ','u9999' |
浮点类型(最高位为符号位) | float | 32位 | 1位为符号8位为指数23位为尾数 | 默认类型为double |
double | 64位 | 1位为符号11位为指数52位为尾数 | ||
布尔类型 | boolean | 1位 | true或false | 不能用0或非0代表 |
常量后加l或L表示该常量为long类型,占64为,否则默认为int类型占32位;
常量后加f或F表示该常量为float类型,占32位,否则默认为64位占64位。浮点数可以采用十进制形式(例:5.12、.512),也可以采用科学计数法形式(例:5.12e2或5.12E2)。
特殊的直接量null,可以赋给任何引用类型的变量,表示该引用类型指向的地址为空。
特殊的浮点数值:正无穷大、负无穷大、非数,表示溢出和出错。使用Double类和Float类的POSITIVE_INFINITY、NEGATIVE_INFINITY和NaN表示。所有正无穷大的数值都是相等的,所有负无穷大的数值都是相等的,NaN不与任何数值相等,NaN与NaN也不相等。只有浮点数除以0才能得到正无穷大或负无穷大,整数除以0会抛出异常。0.0除以0.0或对一个负数开方得到非数即NaN。
整数型数值或浮点型数值可以使用下划线作为分隔,java7以上支持,例如:4_524_012_578,0B1000_1111_0101_1011。
二、类型转换
类型的自动提升:当一个表达式中包含多个基本类型的值时,整个表达式将发生自动提升。自动提升的规则如下:
- 所有byte类型、short类型和char类型将自动提升为int类型
- 整个算数表达式的数据类型自动提升到与表达式中最坐高等级操作数同样的类型。
强制类型类型转换,语法格式:(type)value。字符串转为基本类型时,需要使用对应的包装类:Byte、Short、Integer、Long、Character、Float、Double,它们提供了静态方法parseXxx(String str)用于转换。
三、运算
运算符优先级
左移运算<<,将操作数的二进制码整体左移指定位数,右边空出的位用0填充,注意:负数的符号位也参与移动。
右移运算>>,将操作数的二进制码整体右移指定位数,空出来的位置使用符号位填充,注意:符号位始终保持不变。
无符号右移运算>>>,将操作数的二进制码整体右移指定位数,空出来的位置使用0填充,注意:符号位变为0。
移位运算遵循的规则:
- 对于低于int类型(byte、short、char)的操作数总是先自动转换为int类型,然后再移位;
- 对于int型的移位操作a>>b,当b>32时,系统先用b对32求余,余数为真正的移位数,例如:a>>33和a>>1的结果一样;
- 对于long型的移位操作a>>b,当b>64时,系统先用b对64求余,余数为真正的移位数。
逻辑运算符&&和&的区别:对于&&,如果左边的表达式为false,则右边的表达式将不再就算;而&,两边的表达式总会计算,不论左边的表达式是否为false。
逻辑运算符||和|的区别:对于||,如果左边的表达式为true,则右边的表达式将不再就算;而|,两边的表达式总会计算,不论左边的表达式是否为true。