Java

  1. 概述

    1. 赋值语句返回值
    2. 运算符优先级, 结合性
    3. 基础复习...
  2. 背景

    1. 复习算法

      1. 邓俊辉老师的视频
      2. c++ 的语法
    2. 在写 冒泡排序 的时候, 出现了一个骚操作

      1. 大概是把 一个赋值语句, 放到了 for 循环的 条件判断 的位置
    3. 这个骚操作, 忽然让我这个基础不好的学渣, 一下陷入了迷茫

      1. 卧槽, 这赋值语句也能当条件用?
  3. 环境

      1. 这块和环境, 真的没啥关系
  4. 类型

    1. 总结类

1. 问题: 赋值语句 作为 for 循环条件

  1. 概述

    1. 问题
  2. 场景

    1. 算法公开课

      1. p25
    2. 代码

      void bubblesort(int A[], int n) {
          for (bool sorted = false; sorted = !sorted; n--) {
              for (int i = 1; i < n; i++) {
                  if (A[i-1] > A[i]) {
                  swap(A[i-1],A[i]);
                  }
              }
          }
      }
      
  3. 问题: sorted = !sorted

    1. 问题
      1. rt
      2. 通常 for 循环里, 应该都是 返回 bool/boolean 类型的语句

2. 结论: C++ 赋值语句, 可以返回赋值的结果

  1. 概述

  2. 例子

    int a = 0
    
    # 这个式子, 返回值就是 1
    a = 1;
    
  3. 问题

    1. Java 也是这样的吗?

3. 结论: Java 也是这样的

  1. 概述

  2. 问题: 这个式子, 如何理解?

    1. rt

      a = b = 1
      
    2. 解答

      1. 先算 b = 1
      2. 这个式子的 返回值 是 1
      3. 让后将 1 赋值给 a
  3. 问题: 凭什么先算 b = 1

    1. 问题
      1. rt
      2. 虽然逻辑上 行不通, 可是为什么不是先算 a = b?

4. 运算符的优先级与结合性

  1. 概述

    1. 优先级
    2. 结合性
    3. 基础复习...
  2. 优先级

    1. 概述

      1. 多个运算符同时在场时, 计算的顺序
    2. 场景

      1. 一个式子
      2. 有多个运算符
    3. 思路

      1. 从左到右扫描
      2. 先算优先级高的
      3. 再算优先级低的
      4. 同级 从左到右, 依次计算
  3. 结合性

    1. 概述

      1. 运算符自身的顺序
    2. 结合性

      1. 左结合
        1. 先算左边
      2. 右结合
        1. 先算右边
    3. 例子

      # 左结合
      ## 1. 先算左边, 再算右边
      a + b
      
      # 右结合
      ## 2. 先算右边, 再算左边
      a = b
      
  4. 结论

    1. 计算时, 需要先考虑优先级, 再考虑结合性
  5. 建议

    1. 不建议在一个式子里, 使用过多的运算符
    2. 如果一定要用, 建议用 括号隔开, 明确优先级

ps

  1. ref
    1. C/C++中赋值语句的返回值问题

      1. 概述
        1. C++
    2. Java中赋值语句的返回值(通过反编译来分析)

      1. 概述
        1. Java
    3. 运算符优先级和结合性

      1. 概述
        1. C/C++/Java 运算符的 优先级 和 结合性
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出
原文地址:https://www.cnblogs.com/xy14/p/14510863.html