Java数据类型详解

两大数据类型

基本数据类型byte、short、int、long、float、double、char、boolean
引用数据类型:对象、数组等,另外为符合面向对象特征,Java中每一种基本数据类型都有对应的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean,并且提供自动拆装箱功能。

基本数据类型

byte

位长度:8
零值:0
描述:取值范围为-128~127(-2^7 ~ 2^7-1)

char

位长度:16;两个字节
零值:''
描述:用于描述单个任意字符(包括部分中文)、数字(0~65535);char可以执行数学运算,字符在运算过程中会转换为ASCII表中对应的整数;关于char为什么可以存中文字符:Java使用unicode编码存储字符,一个字符占两字节,一个中文字符也占两个字节。

short

位长度:16;两个字节
零值:0
描述:短整型,取值范围-32768~32767

int

位长度:32;四个字节
零值:0
描述:整型,Java中整型缺省类型,字面量类型;取值范围-2^31~2^31-1,最大值约为21亿多

float

位长度:32;四个字节
零值:0.0F
描述:单精度浮点型,实际运算中可能会有精度问题;浮点型数据存储内存结构为:V=(-1)^s * M * 2^E,第31位为实数符号位;s(30位)占一位表示指数符号位;23~29位表示指数位E;0~22位表示有效数位,算上前面的实数符号位总共24位,也就是说float是以指数型:2.19999993E17表示数值,真实数据范围远远不止整型的32位,这也是为什么64位的long可以自动类型转换位只占32位的float

long

位长度:64;8个字节
零值:0L
描述:长整型

double

位长度:64;8字节
零值:0.0D
描述:双精度浮点型,实际运算可能会有精度问题,如金额运算,需要使用BigDecimal

boolean

位长度:8或32位;1字节或4字节
零值(初始值):false
描述:只有两种值,true/false表示真/假;在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。

如果以数字表示,0为false,非0为true。
在js中还有如下规则:

if (‘0’) alert("‘0’ is true");
if (‘0’ == false) alert("‘0’ is false");
结果是,两次都 alert 了!那么 ‘0’ 到底是 true 还是 false 呢?
在js做比较的时候,有这样的三条规则:

  • 如果比较的两者中有boolean,会把 boolean 先转换为对应的 number,即 0 和 1(false是0,1是true)
  • 如果比较的双方中有一方为number一方为string,会把string转换为数字
  • 把string直接转换为boolean的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true

类型转换

正向过程:自动类型转换,占位小的类型可以自动转换为占位大的类型,如:byte、char>short>int>long>float>double
逆向过程:强制类型转换,可能会造成高位精度丢失

类型提升

运算过程会出现类型自动提升现象,规则如下:

如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。

原码、反码与补码

计算机中数据是以补码的形式存储数字

原码:数字的二进制表示,最高位用于符号位,0为正,1为负
反码:正数的反码等于原码,负数的反码等于原码符号位不变其余各位取反
补码:正数的补码等于原码,负数的补码等于反码+1

反码是为了解决正负相加等于0而引入的,但是无法区分+0与-0;补码使用进位溢出解决了+/-0问题,但是引入了如【-128~127】中的-128.
原码、反码、补码
如上图:-8是怎么来的?

用4位2进制表示:(-1)+(-7)= 【1111】_补+【1001】_补 = 【1000】补 = (-8)。-8只有补码,没有原码和反码,也是4位带符号的2进制可以表示的最小数字。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值