当前位置: 首页 > 新闻动态 > 网络资讯

在Java里如何进行基本运算_Java算术运算与优先级说明

作者:P粉602998670 浏览: 发布日期:2026-01-28
[导读]:Java算术运算符有+、-、、/、%五种,分别表示加法、减法、乘法、除法和取余;整数除法截断小数,需转浮点类型得小数结果;优先级为/%>+-,左结合;混合运算按拓宽规则自动提升类型。
Java算术运算符有+、-、、/、%五种,分别表示加法、减法、乘法、除法和取余;整数除法截断小数,需转浮点类型得小数结果;优先级为 / % > + -,左结合;混合运算按拓宽规则自动提升类型。

Java里的基本运算就是用 +-*/% 这五个算术运算符对整数或浮点数做计算,但结果是否符合预期,取决于你有没有踩中类型转换和优先级的坑。

Java算术运算符有哪些,对应什么含义

Java支持五种基础算术运算符,不支持幂运算(如 **^)——^ 在Java里是位异或,不是乘方:

  • +:加法(也用于字符串拼接,但那是重载行为,不算算术)
  • -:减法或取负
  • *:乘法
  • /:除法(整数相除会截断小数,比如 5 / 2 结果是 2,不是 2.5
  • %:取余(要求左右操作数都是整数类型或能提升为整数的类型;7.5 % 2.0 合法,但 7 % 0 会抛 ArithmeticException

整数除法为什么总是丢小数?怎么得到小数结果

Java中只要两个操作数都是整数类型(intlong 等),/ 就执行整数除法,直接截断,不四舍五入。

想得到小数结果,必须让至少一个操作数是浮点类型:

  • 写成 5.0 / 25 / 2.0(double)5 / 2
  • 避免写 5 / 2 * 1.0 —— 因为 5 / 2 先算完得 2,再乘 1.02.0,不是 2.5
  • 如果变量是 int a = 5, b = 2;,推荐转成 (double) a / b,而不是 a / b

    * 1.0

运算符优先级与结合性常见误判点

Java算术运算符优先级从高到低是:++/--(后缀)→ +/-(一元)→ *///%+/-(二元)。同级左结合。

容易出错的地方:

  • 2 + 3 * 414,不是 20* 优先于 +
  • -3 + 2 中的 - 是一元负号,优先级高于 +,等价于 (-3) + 2
  • 10 - 3 + 29(左结合:先算 10 - 37,再 + 2),不是 5
  • 不确定时就加括号,比如 a + b * c 明确写成 a + (b * c),既防错也提高可读性

混合类型运算时的自动类型提升规则

当不同数值类型参与运算(如 intlongintdouble),Java会按“拓宽转换”规则自动提升为更宽的类型:

  • byte / short / char → 首先提升为 int(哪怕和 long 运算,也是先升 int 再升 long
  • int + long → 结果是 long
  • int + double → 结果是 double
  • float + doubledouble(不是 float

注意:int a = 1; long b = 2; int c = a + b; 编译失败,因为 a + blong 类型,不能直接赋给 int 变量,必须显式强转:int c = (int)(a + b);(可能溢出)

int x = 10;
int y = 3;
System.out.println(x / y);      // 输出 3(整数除法)
System.out.println(x / (double) y); // 输出 3.3333333333333335
System.out.println(2 + 3 * 4);  // 输出 14(* 优先)
System.out.println((2 + 3) * 4); // 输出 20(括号改变顺序)

最常被忽略的是整数除法的静默截断,以及类型提升后赋值时的编译错误——这两个问题在调试时往往表现为“结果不对”却找不到原因,其实就卡在运算前的类型和优先级判断上。

免责声明:转载请注明出处:http://m.hclxt.cn/news/745425.html

扫一扫高效沟通

多一份参考总有益处

免费领取网站策划SEO优化策划方案

请填写下方表单,我们会尽快与您联系
感谢您的咨询,我们会尽快给您回复!