Java学习之旅第一季-16:运算符之算术运算符

算术运算符是一种将数值作为操作数并执行算术运算(例如加法和减法)以计算另一个数值的运算符。下表列出了 Java 中的所有算术运算符。其中运算符只能与数值类型的操作数一起使用。也就是说,算术运算符的两个操作数都必须是 byte、short、char、int、long、float 和 double 类型中的某一种。

下面的例子首先以int类型的数据进行演示。

16.1 + 运算符

这个运算符比较好理解,它是一个二元运算符,用于数值之间的操作,就是进行数学意义上的求和;不过它还能用于字符串之间的拼接。另外,如果直接放在数据或变量前面则表示正数,此时也可以认为它是一个一元运算符,本小节主要探讨作为二元运算符进行数值相加的场景。

int num1 = 1;
int num2 = num1 + 10;
System.out.println(num2);    // 输出 11

16.2 - 运算符

和 + 类似,- 运算符主要用于两个数值之间的差,也可以变量前获取其相反数。

 int num3 = 10 - 5;
System.out.println(num3);    // 输出 5

16.3 * 运算符

用于计算两个数值的乘积,示例如下:

System.out.println(2 * 5);   // 输出 10

注意这里的乘法使用的是字母星号来表示。

16.4 / 运算符

计算两个数值的商。示例如下:

System.out.println(10 / 5);    // 输出 2
System.out.println(-10 / 2);   // 输出 -5
System.out.println(10 / 3);    // 输出 3
System.out.println(11 / 3);    // 输出 3

第1行和第2行代码没有什么需要解释的,第3行代码需要注意的是,我们从数学计算的角度会认为结果是 3.3333…、但是结果却是3,这是因为参与运算的两个数默认都是int类型,那么结果也只能是int类型。

第4行需要留意的是没有采取四舍五入的方式将结果计算为4,而是直接舍弃小数位,保留正数为 3、

同时也要注意,要避免使用零作为除数,,比如:

System.out.println(1 / 0);   // 会抛出异常

但是如果是浮点型数据除以0,则不会排除异常,会输出 Infinity,即无穷大。

System.out.println(1.0 / 0);

16.5 % 运算符

计算两个数值的余数,也称为取模,符号取决于被除数。示例如下:

System.out.println(10 % 3);    // 输出 1
System.out.println(-10 % 3);   // 输出 -1
System.out.println(10 % -3);   // 输出 1
System.out.println(-10 % -3);  // 输出 -1

对于%运算的结果,可以先取绝对值计算,然后将计算结果的符号与被除数保持一致即可。

16.6 复合赋值运算符

与数学运算相关的复合赋值运算符包括:+=、-=、*=、/=、%= 。下面主要以 += 为例。

如果针对某变量进行了运算之后的结果赋值给该变量,常规写法是这样的:

int num1 = 1;
num1 = num1 + 5;   // num1自身增加5

而符合赋值运算符使用时,代码更简洁,在编译器内部也有一定的性能优化:

int num1 = 1;
num1 += 5;      // 效果上与 num1 = num1 + 5;一样

当然右边参与运算的数也可以是负数:

int num1 = 1;
num1 += -5;   // num1自身减少 5,相当于 num1 -= 5;

其他类似的复合赋值运算符就不再赘述了。

16.7 自增自减运算符

如果仅仅针对数值类型的变量进行自增1或自减1,可以使用更加简单的语法。

自增自减运算符的一元运算符,用于对数值类型的操作数自身进行加1或减1,可以出现在操作数的前面或后面。

  • ++:自增运算符,对操作数自增1
  • –:自减运算符,对操作数自减1
int num1 = 1;
num1++;
System.out.println(num1);  // 输出 2
int num2 = 1;
num2--;
System.out.println(num2);  // 输出 0

上述代码的结果很好理解,但是如果自增自减运算符参与运算之后的表达式仅需参与运算,则自增自减运算符在变量前与在变量后是有区别的。先说结论:

  • 运算符在前:先执行自增或自减再参与运算
  • 运算符在后:先参与运算再执行自增或自减

比如以下示例代码:

int num3 = 3;
System.out.println(num3++);  // 先参与运算,即先输出3,然后再自增为4
System.out.println(num3);    // 输出自增后的结果 4

int num4 = 4;
System.out.println(--num4);  // 先自减结果为3,然后再输出结果3
System.out.println(num4);    // 输出自减后的结果3

对byte、short类型的数据自增或自减,其类型不会变,如直接加1或减1,其结果的数据类型会成为int,比如:

byte b = 1;
b++;
b = b + 1;  // 编译错误

看起来第2行与第3行是一个效果但是对于 b+1 这个表达式,由于1 是int ,会导致整个运算结果为int,就没法直接给byte类型的b赋值了。

16.8 算术运算中的通用规则

  • 参与运算的数据类型为short,byte,char类型则自动转换为int,char类型会转为对应的ASCII码

  • 计算结果的数据类型为参与运算数据的最大范围数据类型,比如:1 +1.1 那么结果就是double类型

  • / 和 % 不能将0作为除数,但是0.0或0.0D作为除数返回特殊的值

  • float与double计算不精确,之前介绍浮点数据类型演示过,可以参考Java学习之旅第一季-10:数据类型之浮点数值类型

  • 最大值或最小值计算可能会溢出导致结果不正确,但不报错,比如: Integer.MAX_VALUE+1,结果为 -2147483648

16.9 小结

本小节主要介绍了Java中的算术运算符,包括基本的加、减、乘、除、求余等,还有复合赋值运算符及自增自减运算符的使用及注意事项。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值