美文网首页Android开发Java技术文章技术文
Java基础篇(二):前置与后置运算符

Java基础篇(二):前置与后置运算符

作者: AlvinL | 来源:发表于2015-03-19 15:24 被阅读1081次

前置与后置运算符是非常常用的运算符,但它们有什么区别?这里以++为例子,看下面的代码:

public class Test 
{
    public static void main(String[] args) 
    {   
        int x = 0;
        x ++;
        ++ x;
    }
}

在这段代码中,x++++x的效果是一样的。再看下面的代码:

public class Test 
{
    public static void main(String[] args) 
    {   
        int x = 0;
        int y = x++;
        int z = ++x;
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
    }
}

输出结果是

2
0
2

来分析一下代码,x++++x语句的结果都是将x的值加1,而它们的区别就是它们的返回值不一样,x++返回的值是x原来的值(加1之前的值),所以y的值为0,此时x的值为1,++x返回的值是加1之后的值,因此z的值为2,x的值也是2。

C/C++中的前置与后置运算符##

C/C++中的前置与后置运算符对操作数进行运算的结果与Java中是一样的,但有一点不一样,还是它们的返回值不一样,有些同学可能要问,返回值跟Java中是一样的啊,哪里不一样了,看看下面的代码你就明白了:

#include <iostream>
using namespace std;

int main()
{
    int x = 0;
    (x++) ++;   // 这句编译错误,提示:error: non-lvalue in increment
    (++x) ++;
    cout << x << endl;
}

看明白了吗?重点就在于(x++) ++(++x) ++,前者会编译错误,提示非左值不能进行自增操作,而后者可以正常编译。也就是说,在C/C++,x++返回的仅仅是一个而已,不能对其进行写操作,而++x返回的是x本身这个变量,可以对其进行写操作。
而在Java中,如下:

public class Test 
{
    public static void main(String[] args) 
    {   
        int x = 0;
        (x++) ++;    // 编译错误
        (++x) ++;    // 编译错误
    }
}

两者都会编译错误,说明在Java中,不管是前置还是后置运算符返回的都是值,不能作为左值进行写操作。

左值

左值(lvalue) 是B语言/C语言/C++语言类C语言中的一类表达式。“左”(left)的原意是指可以放在赋值符号“=”的左边,但其实也表示能作为&和++等操作符的操作数(B语言中已经如此)。而且,现代C/C++中的含义已经不局限于此。lvalue的l被重新解释为location。这也对应于ISO C11/ISO C++11的内存位置(memory location)。(引自左值-百度百科)

相关文章

  • Java基础篇(二):前置与后置运算符

    前置与后置运算符是非常常用的运算符,但它们有什么区别?这里以++为例子,看下面的代码: 在这段代码中,x++与++...

  • swift学习笔记(2)--- 基本运算符

    运算符分为一元、二元和三元运算符: 一元运算符对单一操作对象(如 -a)。一元运算符分前置运算符和后置运算符,前置...

  • C++ - 自加/自减运算符的重载

    ++/-- 运算符有前置/后置之分 前置运算符作为一元运算符重载重载为成员函数:T operator++();T ...

  • swift基础部分小记

    1 术语 运算符分为一元,二元和三元运算符 一元运算符对单一操作对象操作,一元运算符分前置运算符和后置运算符,前置...

  • Swift3.1_运算符

    基本运算符 术语 一元运算符对单一操作对象操作(-a)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作...

  • 第四章 运算符重载

    学习目的 掌握运算符函数的定义; 掌握+、-、++、+=等常用运算符的重载; 了解<<运算符、前置和后置++运算符...

  • Swift之自定义运算符

    1.swift允许中自定义运算符: 前置运算符(prefix)中间运算符(infix)后置运算符(postfix)...

  • swift 基本运算符

    术语 一元运算符对单一操作对象操作,如 -a一元运算符分前置运算符和后置运算符前置运算符需紧跟在操作对象之前,如 ...

  • C++ 自增、自减运算符的重载和性能分析

    01 ++、--运算符重载函数的格式 自增运算符和自减运算符是有前置和后置之分的,如: 为了区分所重载的是前置运算...

  • 6.算数运算符

    1.算数运算符 1.1前置,后置 K++ ++K 当K值被取后,后置+开始变化 1.2+ 1.当加号运算符时,St...

网友评论

    本文标题:Java基础篇(二):前置与后置运算符

    本文链接:https://www.haomeiwen.com/subject/irdwxttx.html