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);
我想知道什么是增加的。这个递增的值在哪里。
答案 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;