楼主: yujianta14
548 0

Java篇——运算顺序的详细挖掘(下) [推广有奖]

  • 0关注
  • 0粉丝

本科生

36%

还不是VIP/贵宾

-

威望
0
论坛币
130 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1703 点
帖子
45
精华
0
在线时间
10 小时
注册时间
2016-4-18
最后登录
2016-6-27

楼主
yujianta14 发表于 2016-4-19 15:15:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

接着上一篇没发完的Java篇——运算顺序的详细挖掘(上)继续:

复合运算符

我们知道,复合运算符可以自动将右侧运算的结果类型转换为左侧操作数的类型。例如如下的代码:

  1. byte b = 1;
  2. b = b + 1; //错误
  3. b += 1; //正确
复制代码

因为常量 1 为 int 类型,所以右侧的结果是 int 类型,不能赋值给一个 byte 类型的变量,但
是使用复合运算符( +=)是可以的,第 3 条语句相当于:

  1. b = (byte)(b + 1);
复制代码

除此之外,复合运算符也有上述的性质,即遵循操作数从左向右计算的原则,也就是说,在执行赋值操作之前,首先会确定左侧的操作数。
【例】 复合运算符。

  1. 1. package chapter2;
  2. 2.
  3. 3. import java.util.Arrays;
  4. 4.
  5. 5. public class Order2 {
  6. 6. public static void main(String[] args) {
  7. 7. int a = 10;
  8. 8. a += ++a;
  9. 9. System.out.println("a=" + a);
  10. 10. int[] array = new int[] {
  11. 11. 8, 9, 10
  12. 12. };
  13. 13. int b = 1;
  14. 14. array[b] *= b = 2;
  15. 15. System.out.println("b=" + b);
  16. 16. System.out.println(Arrays.toString(array));
  17. 17. }
  18. 18.}
复制代码

由于有了上面的讲解,这个程序的运行结果应该不难想象了,如下:

  1. a=21
  2. b=2
  3. [8, 18, 10]
复制代码

总之,运算前会先将左侧的操作数保存起来,左侧的操作数不会受到其右侧表达式的影响而造成改变。

总结:

1.在 Java 语言中,操作数的计算顺序是从左向右的,即使运算符是从右向左结合的也是
如此。

2.与 C / C++等语言不同, Java 的运算结果受硬件环境的影响很小,计算方式也是确定的。

举一反三

在参数传递的过程中,是否也符合本话题讲述的规则呢?例如下面的程序:

  1. 1.package chapter2;
  2. 2.
  3. 3. public class Order3 {
  4. 4. public static void main(String[] args) {
  5. 5. Order3 order = new Order3();
  6. 6. int i = 10;
  7. 7. order.test(i, ++i, i = 2);
  8. 8. order.test(i = 5, i++, i);
  9. 9. }
  10. 10.
  11. 11. public void test(int x, int y, int z) {
  12. 12. System.out.println(x);
  13. 13. System.out.println(y);
  14. 14. System.out.println(z);
  15. 15. }
  16. 16.}[color=black][backcolor=rgb(255, 255, 255)][font=CourierNewPSMT, serif][size=9pt] [/size][/font][/backcolor][/color]
复制代码

结果是多少呢?自己试试看吧。

  本文作者:梁勇 出自柠檬派http://www.lemonpai.com 请务必保留此出处 ,否则将追究法律责任!



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Java jav tostring Chapter package package public import Java

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-3 04:45