zoukankan      html  css  js  c++  java
  • 关于运算符的那些坑—自增x++&&++y

    题目

    比较常见的问题,因为比较细,看书的时候一不注意可能就过去啦,但是遇到的时候就会容易出问题。先看下面程序,考虑一下运行结果是什么呢?

    int x = 1, y = 1;
    if(x++ == 2 && ++y == 2){
        x = 8;
    }
    System.out.println("x = " + x + ", y = " + y);

    虽然很短的一个小程序,但是考察了两个细节,分别是下面两个:

    自增自减运算符

    Java运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符等,算术运算符包括+、-、*、/、%和++、--,其中,自增和自减比较特殊,其他算术运算符需要两个操作数来进行运算,而自增自减只需要一个操作数就可以。
    自增自减最特殊的地方不止在于一个操作数,而是在用于表达式的时候,前缀自增自减和后缀自增自减的运算是不同的

    int x = 1, y = 1;
    System.out.println(x++);    //打印结果是1
    System.out.println(x++);    //打印结果是2
    
    System.out.println(++y);    //打印结果是2

    通过打印结果可以看出:
    后缀自增自减法(a++,a--): 先进行表达式运算(打印),再进行自增或者自减运算
    前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算(打印)。

    如果单独作为一条语句的话,并没有区别,例如 x++;和++x没有任何区别

    这样再想想上面题目中的运行结果应该是多少呢?

    短路逻辑运算符

    逻辑运算符包括&&、||、!,比较常见就不多赘述。
    不过,在使用&&与这个逻辑运算符时,在两侧都为true时,结果才为true,有一个为false时,结果则为false,但是如果第一个为false时,第二个就不会再进行操作运算啦
    这个规定还有个名字叫【短路逻辑运算符】

    根据这个再想想刚才的题目;

    结果是多少呢?

    上面题目的运行结果是:
    x = 2,y =1

    因为x++ == 2 先判断x == 2 是false,然后再 x = x + 1;
    并且,不再运算 ++y == 2,

    参考资料

    1、菜鸟教程—Java 运算符

  • 相关阅读:
    maven工程下 读取resource下配置文件
    js生成二维码以及点击下载二维码
    RGB颜色值与十六进制颜色码对照表
    用Java实现给图片添加文字
    CryptoAPI与openssl数字签名与验证交互
    CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
    openssl与cryptoAPI交互AES加密解密
    JAVA解析各种编码密钥对(DER、PEM、openssh公钥)
    Java与.NET兼容的RSA密钥持久化方法
    .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY
  • 原文地址:https://www.cnblogs.com/Dreamice/p/11972938.html
Copyright © 2011-2022 走看看