Java的数据类型共有8种:
- byte:1字节(8位)
- short:2字节(16位)
- int:4字节(32位)
- long:8字节(64位)
- float:4字节(32位)
- double:8字节(64位)
- char:2字节(16位)
- boolean:4字节(32位),在数组中1字节(8位)
基本数据类型没有什么好说的,类型越小占用内存空间越小。至于为什么分出这么多类型,还是为了节省内存空间。
能点小杯我就不花超大杯的钱。
主要不好理解的点在于数据类型转换。
这里只拿int类型数据和long类型数据做一个比喻:int是一个4立方的小箱子,long是一个8立方的大箱子。int箱子里装了占地4立方的一张床,long箱子里装了占地4立方的一张桌子。
那么问题来了,现在要把床和卓子互相交换箱子存放,理论上没问题。
但是int箱子的主人不同意了:”我箱子比你的箱子小,你箱子里的东西放我这,不一定放得下“。
即使long箱子里面只装了一张4立方的桌子,int箱子确实放得下,但int的主人也不敢冒这个险。你说放得下就放得下吗?万一撑爆了呢?
除非拿出证据来。
而反过来,把int箱子里面的床搬出来放到long箱子里是可以的,long箱子的主人也不需要猜床是否能放进long箱子。
因为int箱子比long箱子小,床既然能放进int箱子里,那放进long箱子里就更不用说了。
数据类型转换就是这样一个概念,高精度的long数据转换成低精度的int数据,系统就会报错(低容积的int主人认为箱子有裂开的风险,拒绝和long箱子进行交换),而低精度的int数据转换成高精度的long数据,就容易得多。
那有什么办法把桌子放进int箱子呢?这里就涉及到强制转换的概念了。
long箱子的主人可以出具一张”经本机构专业测量,此桌占地3立方“的报告(在需要强转的代码前添加(int)代码,把long数据手动改为int数据),这样int箱子的主人看到报告,就能够确认他的箱子可以容纳long箱子的东西,就可以放心地和long箱子的主人互换物品了。
但如果long数据超过了int数据的最大值(假设把long箱子的桌子突然变成8立方的台球桌,这样就超出了int箱子的最大存放容积),即便强制转换,还是会出问题。因为这样做,存在数据溢出的风险(把贴了认证报告的台球桌强行放进int箱子,就真的会裂开)。