后递增并分配给相同的变量

时间:2017-07-04 15:10:10

标签: java

int b = 2;

c= b++;
System.out.Println("C :"+c+"B"+b);

c为2,b为3。

int b = 2;

b= b++;
System.out.Println("B:"+b);

我想知道什么是增加的。这个递增的值在哪里。

3 个答案:

答案 0 :(得分:2)

这很棘手。让我们来看看后增量运算符的作用。 JLS州:

  

后缀增量表达式的值是存储新值之前变量的值。

因此,代码b++的值为2,与b的增量无关。

如果进行赋值,则首先计算右侧表达式,然后将其值存储到变量中。

如果你做c = b++,这很简单。表达式b++的值2会被分配到c。在该语句之后b具有递增的值3。但这有点简化了。实际发生的是,首先评估b++,意味着b在分配之前增加,而不是之后。

那么当你做b = b++时会发生什么?嗯,它是一样的:首先评估b++,意味着b递增。之后,分配将发生,表达式b++ 值将分配给b。这仍然是2并覆盖您增加的b

有趣的事实:如果我在Eclipse中输入第二个代码,Findbugs会发出以下警告:

  

错误:MyClass.main(String [])中的覆盖增量

     

代码执行递增操作(例如,i ++),然后立即覆盖它。例如,i = i ++立即用原始值覆盖递增的值。

答案 1 :(得分:1)

我想你不知道这里发生了什么:

     body
    {
        color:black;
    }

p
    {
        color:black;
        font-size:12px;
        font-family: Constantia, Aldhabi, Book Antiqua;
    }

h1
    {
        color:blue;
        font-weight:bold;
        font-family:"Book Antiqua";
    }

h4
    {
        color:blue;
        font-weight:bold;
        font-family:"Book Antiqua", Arial;
    }

.gallery
{
    float:right;
}

div.gallery.hover
{
    border: 1px solid orange;
}

div.gallery.img
{
    width:110px;
    height: 110px;
}

#TotalSystemPrice
{

}

#container 
    {
        display: table;
        table-layout: fixed;
        width:90%;
        height:100%;
        border: 1px solid black;
        padding: 3px;
    }   

#left, #right
    {
        display: table-cell;
    }

#left
    {
        width: 50%;
        height: 100%;
        background: white;
        border: 1px solid blue;
        margin:3px 2px; 
    }

#right
    {
        width: 50%;
        height: 100%;
        background-color:ivory;
        border: 1px solid blue;
        margin: 3px 2px;
    }

#computerOrders 
    {
        width:50%;
        height:100%;
        background-color:white;
    }

#orderInfo 
    {
        width:50%;
        height:100%;
        background-color:white;
    }

更具体地说,这一行:

int b = 2;

b= b++;
System.out.println("B:"+b);

编译器发现这是一个赋值语句,因此它首先尝试计算右边的表达式:

b = b++;

由于b++ 这里是一个后增量运算符,表达式只计算为++,即2.在评估之后,b会立即增加到3.

我们还没有完成!记得这是一份作业陈述吗?现在评估了右侧,表达式现在看起来像这样:

b

大!现在为b = 2; 分配了值b

答案 2 :(得分:1)

int b=2    
b = b++

就像您正在运行此代码

int b = 2;
int temp = b;
b = b + 1;
b = temp;