zoukankan      html  css  js  c++  java
  • java基础(四) java运算顺序的深入解析

    1. 从左往右的计算顺序

      与C/C++不同的是,在Java中,表达式的计算与结果是确定的,不受硬件与环境的影响。如:

    int i = 5;
    int j = (i++) + (i++) +(i++);
    

      在C/C++中,这个例子的运算结果将会根据不同的开发环境而不同。Turbo C下,j的值是15;在VC下,j的值是 18。

      在Java中,表达式的计算顺序是从左往右的,也就是先计算左侧的结果,再计算右侧的结果。上面的例子计算结果就一定是 18。也就是说,右侧(i++)表达式使用的 i 的值 就是 左侧(i++)表达式计算完后 i 的值,即左侧比右侧先进行运算。

    看下面几个例子

    @ Example 1

    	int a[] = new int[]{0,0,0,0};
    	int i = 1;
    	a[i++] = i++;
    	System.out.println("i="+i);
    	System.out.println(Arrays.toString(a));
    

    运行结果:

    i=3
    [0, 2, 0, 0]

    @ Example 2

    	int a[] = new int[]{0,0,0,0};
    	int i = 1;
    	a[i++] = i = 4;
    	System.out.println("i="+i);
    	System.out.println(Arrays.toString(a));
    

    运行结果:

    i=4
    [0, 4, 0, 0]

    @ Example 3

    	int a[] = new int[]{0,0,0,0};
    	int b[] = new int[]{1,2,3,4,5};
    	int cc[] = a;
    	int i = 1;
    	a[++i] = (a=b)[i]; 
    	System.out.println("i="+i);
    	System.out.println("数组a[]: "+Arrays.toString(a));
    	System.out.println("数组c[]: "+Arrays.toString(cc));
    

    运行结果:

    i=2
    数组a[]: [1, 2, 3, 4, 5]
    数组c[]: [0, 0, 3, 0]

    2. 复合运算符的计算顺序

      复合运算符有一个特点:可以自动将右侧的运算结果类型转换成左侧操作数的类型。如:

    byte b += 1;    //正确
         b = b+1;  //错误,1是整形int,所以右侧的b+1的结果是int类型。需强制转换
    

    所以,复合类型的表达式,如 b += 1; 是相当于:

    byte b = (int)(b + 1);
    

      除此之外, 复合运算符也是遵守操作数从右往左计算的原则。 也就是说,在执行赋值操作之前,首先会确定左侧的操作数。

    看下面的几个例子:

             int a = 1;
             a += ++a;
             System.out.println(a);
    

    运行结果:

    3

      根据上面的所说的,这个程序就不难理解了,先计算左侧a的值是1,然后再计算出右侧++a表达式的值是 2 ,最后便是计算 1+2 的值为 3,赋值给a。

    如果还是觉得难理解的,可以写成等价的普通式子,然后从左往右计算右侧的表达式。这可能比较容易理解:

    a = a + ++a;
    

    再看一个例子,加深理解:

             int a = 5;
             a *= a=2;
             System.out.println(a);
    

    运行结果:

    10

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/jinggod/p/8424880.html
Copyright © 2011-2022 走看看