【初学者必看】Java的8种基础数据类型(附运算符优先级表)
Java基础数据类型与运算符
- 引言
- 第一部分:8种基础数据类型
- 第二部分:类型转换
- 第三部分:运算符
- 第四部分:运算符优先级(建议背下来)
- 第五部分:易犯的3个错误
- 第六部分:总结
引言
大家好,我是菜程序。昨天我们搞定了Java环境搭建,成功跑出了第一个Hello World。今天正式进入Java语法世界的第一关——基础数据类型和运算符。
这大概是新手最先接触的内容,但也是最容易埋坑的地方。我见过太多人学完基础后,面试时被问“byte的取值范围是多少”一脸懵,或者在写循环时因为运算符优先级搞错而debug一下午。
这篇文章不讲废话,直接上干货。读完你将掌握:8种基础数据类型的取值范围和默认值;类型转换的规则;运算符的优先级以及新手易犯的错误和解方式。
第一部分:8种基础数据类型
1.1 Java是强类型语言,每个变量都必须声明类型。基础数据类型Primitive Type)是Java的基石,分为4类8种:
| 类别 | 数据类型 | 字节数 | 取值范围 | 默认值 |
|---|---|---|---|---|
| 整数 | byte | 1 | -128 ~ 127 | 0 |
| 整数 | short | 2 | -32768 ~ 32767 | 0 |
| 整数 | int | 4 | -2^31 ~ 2^31-1 (约±21亿) | 0 |
| 整数 | long | 8 | -2^63 ~ 2^63-1 | 0L |
| 浮点 | float | 4 | 约 ±3.4E38 | 0.0f |
| 浮点 | double | 8 | 约 ±1.8E308 | 0.0d |
| 字符 | char | 2 | 0 ~ 65535 (Unicode) | ‘\u0000’ |
| 布尔 | boolean | 1 (官方未精确定义) | true / false | false |
1.2 重点提醒
(1)byte的坑:很多人以为byte范围是0-255,其实是-128-127。因为Java的byte是有符号的。
(2)long类型赋值必须加L:
longmoney=10000000000L;// 不加L会报错,因为整数默认是int(3)float必须加f:
floatprice=19.9f;// 不加f会报错,小数默认是double(4)char可以赋整数(对应ASCII/Unicode):
charc=65;// 对应字符'A'System.out.println(c);// 输出A第二部分:类型转换
2.1 自动类型转换(隐式转换)
规则:小范围 → 大范围,自动发生,无信息丢失。
顺序:byte → short → int → long → float → double
(注意:int转float可能丢失精度,但语法允许)
inti=100;longl=i;// 自动转换floatf=l;// 自动转换(可能丢失精度)doubled=f;// 自动转换2.2 强制类型转换(显式转换)
规则:大范围 → 小范围,需要强制,可能丢失数据。
doubled=100.5;inti=(int)d;// 强制转换,结果为100(小数部分被截断)⚠️ 经典陷阱:byte b = (byte) 130; // 130超出byte范围,结果是多少?
答案:-126(因为溢出后循环计算)
2.3 表达式中的类型提升
规则:表达式运算时,所有byte/short/char都会被自动提升为int。bytea=10;byteb=20;bytec=a+b;// ❌ 编译错误!a+b结果是int,需要强制转换bytec=(byte)(a+b);// ✅ 正确第三部分:运算符
3.1 算术运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
| + | 加 | a + b |
| - | 减 | a - b |
| * | 乘 | a * b |
| / | 除(整数除法取整) | 5 / 2 = 2 |
| % | 取模(余数) | 5 % 2 = 1 |
⚠️ 除法陷阱:
inta=5;intb=2;System.out.println(a/b);// 输出2,不是2.5// 想得到小数:至少有一个操作数是浮点数System.out.println(5.0/2);// 输出2.53.2 关系运算符
| 运算符 | 含义 | 结果类型 |
|---|---|---|
| == | 等于 | boolean |
| != | 不等于 | boolean |
| > | 大于 | boolean |
| >= | 大于等于 | boolean |
| < | 小于 | boolean |
| <= | 小于等于 | boolean |
⚠️ 两个常见坑点:
1.== 与 = 的区别:==是比较运算符,=是赋值运算符。新手经常写错:
if(a=5){}// ❌ 编译错误,a=5是赋值语句,结果是int类型if(a==5){}// ✅ 正确,比较a是否等于52.浮点数不要用 == 直接比较:
floatf=0.1f;doubled=0.1;System.out.println(f==d);// false(精度不同)应使用差值阈值判断:Math.abs(f-d)<0.000013.3 逻辑运算符
⚠️ 短路现象:
inti=0;if(i!=0&&10/i>0){// 因为i!=0为false,右边10/i不会执行,避免了除零异常}3.4 赋值运算符
=直接赋值+=a+=b → a=a+b-=a-=b → a=a-b*=a*=b → a=a*b/=a/=b → a=a/b%=a%=b → a=a%b3.5 自增自减运算符
++i 先自增,再取值 i++先取值,再自增--i 先自减,再取值 i--先取值,再自减经典面试题:
inti=0;intj=i+++++i;// i++:先取值0,i变为1// ++i:i先变为2,取值2// j = 0 + 2 = 2// i最终为2System.out.println("i="+i+", j="+j);// i=2, j=23.6 三元运算符
条件?表达式1:表达式2// 条件为true返回表达式1,否则返回表达式2intmax=(a>b)?a:b;第四部分:运算符优先级(建议背下来)
从高到低:
⚠️ 不记得优先级怎么办?
加括号! 永远不要依赖记忆。写(a + b) * c比a + b * c更清晰,也更安全。
第五部分:易犯的3个错误
错误1:整型除法得到小数
javadoubleresult=5/2;// 结果是2.0,不是2.5正确1:double result = 5.0 / 2; 或 (double)5 / 2
错误2:byte/short运算后不强制转换
byteb1=10;byteb2=20;byteb3=b1+b2;// 编译错误正确5:byte b3 = (byte)(b1 + b2);
错误3:== 比较浮点数
floatf=0.1f;doubled=0.1;System.out.println(f==d);// false(精度不同)正确3:比较浮点数应使用差值阈值,如Math.abs(f - d) < 0.00001
第六部分:总结
📌 本文是《Java后端从入门到进阶》系列的第2篇,免费开放。
数据类型和运算符是Java大厦的地基。但如果你只停留在“会用”层面,面试时会很吃亏。面试官最爱问:
switch支持哪些数据类型?(答案可不只是int)
&和&&除了短路,还有什么区别?
如何用位运算高效判断奇偶?
这些进阶内容,我会在后续付费专栏中深度讲解,每篇附带:
完整代码示例(可直接运行)
面试真题解析(大厂题库)
常见坑点复盘(帮你少走弯路)
💡 下期预告:《流程控制:if/else、循环、switch》,免费发布,记得关注。
如果今天的内容对你有帮助,欢迎点赞、收藏、评论。遇到问题评论区留言,我会一一回复。
