java数据类型分为四类:布尔型、整数型、浮点型和字符型。 下图:
类:逻辑型布尔型
布尔型数据只允许值true或false。 与c语言不同,true和false不能替换为整数0或非零整数。
关于布尔型变量在jvm中占多少字节,java规范没有给出准确的定义。 但是,《Java虚拟机规范》一书中定义了“布尔”数据类型,但仅提供非常有限的支持。 Java虚拟机没有专用于布尔值的字节码指令。 编译后,在Java语言表达式中使用的boolean值将被Java虚拟机中的int数据类型替换,boolean数组将编码为Java虚拟机的byte数组,每个元素的boolean元素占用8位。” 因此,可以看到布尔型单独为4字节,在数组中再为1字节。
类别:文本类型char
常数是用单引号括起来的一个字符。 例如,以下情况:
char eChar='a ';
char cChar='中';
在java中,char类型用unicode编码,每个字符占两个字节。
第三类:整数型(字节、短整型、整型、长整型) )。
每个整数类型占用的存储容量和显示范围如下:
类型
存储空间
表示范围
字节
1字节
-128--127
短整型
2字节
-2^15(-32768(-2^15-1 ) 32767 )
资讯科技
4字节
-2^31(-2147483648(-2^31-1 ) 2147483647 () ) ) ) ) ) ) 652 )
龙格
8字节
-2^63--2^63-1
缺省情况下,java整数常量为int类型,声明long类型的常量可以后跟" l "或" l ",如下所示:
int i=600; //正确
long lo=555L; 如果不输入//L,就会发生错误
有趣的是,short常量可以直接声明,如short=3
但是,任何类型的常数,常数值都不会超出其所能表示的范围。 例如,以下情况:
短整型S1=5; //正确
short s2=32769; //错误,超出了-2^15(-32768 )-2^15-1 ) 32767 )的范围
int i=2147; //正确
int i=2147483649; //错误,超出了-2^31(2147483648(2^31-1 ) 2147483647 )的范围
第四类:浮点型(浮动、双精度) )。
数学中从0到1有无数个浮点数; 另一方面,因为计算机是离散的,所以显示的时候有误差。 计算机在精度(用小数点后多少位正确表示)、浮动小数点数比较时a==0.1不合适,应该是a-0.1==0。 因为a为0.1时,即使有误差,a-0.1==0也表示为a和0.1都有误差的计算机二进制文件。
每种浮点数类型的存储容量和显示范围如下:
类型
存储空间
表示范围
浮动
4字节
-3.403e38----3.403e38
双精度
8字节
-1.798e308----1.798e308
缺省情况下,java浮点常量为双精度类型,如果要声明它始终为浮点类型,请使用f或f,如下所示:
双精度d=123.6//正确
浮动f=13.5 f; 如果不输入//f,就会发生错误
java移位运算符:
java运算符具体有哪些,有各自的优先顺序,在此不详细说明,只选择更复杂的移位运算符详细说明,制定总则。 移动运算符有三种:左移运算符()、无符号右移运算符()。
在计算机中以补数表示数据,因此进行移位操作时,也按位移动补数。
1、左移运算符(
左移运算符
一般格式如下。
value num
num指定将值value移位的位数。
请记住左移的一条规则。 舍弃最高位,用0补最低位
如果移动的位数超过此类型的最大位数,编译器将对移动的位数进行建模。 相对于int型移动33比特时,实际上只移动332=1比特。
左移运算符运算规则
以二进制格式将所有数字左移相应的位数,将高位错开(舍弃),将低位空位填充为零。
如果左移的操作数为字节和短整型,则这些类型将自动放大为int型。
在不溢出数字的前提下,对于正数和负数,向左移动一位相当于2的1次幂,向左移动n位相当于2的n次幂。
板栗:
数据127,补码与原代码相同。 0111 1111。
向左挪一个
:1111 1110-> 补码对应的原码为:1000 0010 对应十进制:-2左移二位:1111 1100-> 补码对应的原码为:1000 0100 对应十进制:-4
左移三位:1111 1000-> 补码对应的原码为:1000 1000 对应十进制:-8
左移四位:1111 0000-> 补码对应的原码为:1001 0000 对应十进制:-16
左移五位:1110 0000 -> 补码对应的原码为:1010 0000 对应十进制:-32
左移六位:1100 0000 -> 补码对应的原码为:1100 0000 对应十进制:-64
左移七位:1000 0000-> 补码对应的原码为:1000 0000 对应十进制:-128
左移八位:0000 0000-> 补码对应的原码为:0000 0000 对应十进制:0
2、右移运算符(>>)
它的通用格式如下所示:
value >> num
num 指定要移位值value 移动的位数。
右移的规则只记住一点:符号位不变,左边补上符号位
运算规则:
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
当右移的运算数是byte和short类型时,将自动把这些类型扩大为int型。
右移一位相当于除2,右移n位相当于除以2的n次方。
3、无符号右移运算符(>>>)
它的通用格式如下所示:
value >>> num
num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
无符号右移规则和右移运算是一样的,只是填充时不管左边最高位的数字是正是负,都用0来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义。
无符号右移运算符>>>只是对32位和64位的值有意义
举例对比>>与>>>:
-5用二进制补码表示1111 1011,红色为该数符号位
-5>>2:1111 1011-------------->1111 1110,11为标志位
-5>>>2:1111 1011-------------->0011 1110,00为补充的0
上文中粗体字体或红色字体的内容为重点了解或者记忆的内容,更多信息,请用微信扫码关注本人公众号