Java数据类型与类型转换
Java 是强类型语言:声明变量必须写明数据类型。变量占一块内存,不同类型占的大小不同。
基本类型一共 8 种:4 种整型、2 种浮点型、1 种字符型、1 种布尔型。它们之间可以自动提升,也可以强制转换,但强制转换可能丢精度。
一、八种基本类型
整型日常用 int;特别大的数用 long(原文用「投放广岛长崎的原子弹释放能量」来形容数量级)。byte、short 多见于底层文件处理、或要压存储的大数组。
Java 整型长度与平台无关,换机器不用改类型;C/C++ 整型长度跟平台走,64 位上稳定的程序搬到 32 位可能溢出。Java 没有无符号类型(unsigned)。
字面量:八进制前缀 0(010 等于十进制 8);十六进制 0x(0xCAFE);Java 7 起二进制前缀 0b(0b1001 等于 9),也可用下划线分隔数字:1_000_000,编译器会丢掉下划线。
| 类型 | 位数 | 要点 |
|---|---|---|
| byte / short / int / long | 8 / 16 / 32 / 64 | 默认用 int;long 字面量加 L |
| float | 32 | 大约 6~7 位有效数字,字面量必须加 F/f |
| double | 64 | 大约 15 位有效数字;不带后缀的小数默认就是 double |
| char | 16 | 单引号一个字符,Unicode |
| boolean | JVM 未规定 | 只有 true / false,不能当 0/1 做算术 |
float 必须带 F 或 f:float x = 223.56F;。double 可写 D/d,不写也行。多数情况直接用 double,float 精度经常不够。
即使浮点看起来是整数,打印时也会带小数点。乘积末尾那一串是 float 二进制舍入的正常现象,不是打印写错。
二、布尔型:不是 C 语言的 0 和 1
C 语言里条件成立常得到 1、否则 0,可以当整数用。Java 的条件结果是 true / false,独立成一种类型,不能和 int 互相赋值。原文写「true 等同于 1」容易误导,那是 C 的习惯,不是 Java 的规则。
原文把最后一行印成「100<10是对的」,和 if (a) 对不上,已按代码改正。
三、自动转换与强制转换
自动转换在运算中悄悄发生,一般从位数低的类型升到高的;强制转换必须在代码里写 (类型),方向不限,但可能丢精度。
自动提升顺序:byte, short, char → int → long → float → double。不同类数据先对齐再运算:两个操作数里「更宽」的那个决定结果类型;byte/short/char 单独运算会先升成 int。
一句话总结:八种基本类型长度与平台无关;小数默认 double、boolean 只有 true/false;低到高可自动升,反向必须强制转并接受可能丢精度。
转载请注明来源:Java数据类型与类型转换本文链接地址:https://ai.zhousir.top/?p=62





