📄 java_plus_minus.htm
字号:
<html>
<!-- #BeginTemplate "/Templates/more.dwt" -->
<head>
<!-- #BeginEditable "doctitle" -->
<title>csdn_JAVA中:关于++和--</title>
<!-- #EndEditable -->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<STYLE type=text/css>
A:link {
COLOR: #000000; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:visited {
COLOR: #333399; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:active {
COLOR: #ff0000; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:hover {
COLOR: black; TEXT-DECORATION: underline
}
BODY {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TH {
FONT-SIZE: 9pt
}
TD {
FONT-SIZE: 9pt
}
TD.page {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TD.title {
COLOR: #000000; FONT-FAMILY:verdana,宋体,新宋体
}
TD.detail {
COLOR: #9966ff; FONT-FAMILY:verdana,宋体,新宋体
}
</STYLE>
</head>
<body bgcolor="#FFFFFF" text="#000000" >
<div align="center"></div>
<table width="700" border="0" align="center">
<tr>
<table width="700" border="1" cellpadding="1" cellspacing="0" bordercolorlight="#9898ba" bordercolordark="#000000">
</table>
<table width="700" cellspacing="0" cellpadding="0" bgcolor="9898ba" border="0">
<tr valign="middle"></tr>
</table>
<div align="center"><b></div>
<table width="700" border="0" cellspacing="0" cellpadding="0" bgcolor="eff3f9">
<tr></tr>
</table>
<br>
<table width="700" border="0">
<tr>
<td width="20"> </td>
<td colspan="2">
<div align="center">
<h3><b><!-- #BeginEditable "5" --><font face="Verdana, Arial, Helvetica, sans-serif" >JAVA中:关于++和--</font><!-- #EndEditable --></b></h3>
</div>
</td>
<td width="20"> </td>
</tr>
<tr>
<td width="20"> </td>
<td colspan="2"><!-- #BeginEditable "6" -->对于++和--这两个运算符,c/c++语言和java语言有着截然不同的结果。大家可以测试一下。看看下面的程序:<br>
<br>
…… <br>
public static void main(java.lang.String[] args) { <br>
<br>
int k=0; <br>
k=k++; <br>
System.out.println("the first k="+k);//0???? <br>
k++; <br>
System.out.println("the second k="+k); <br>
///////////////////////////////////////////// <br>
int x=0,y=0; <br>
y=x++; <br>
System.out.println("the first x="+x); <br>
System.out.println("the first y="+y); <br>
x++; <br>
System.out.println("the first x="+x); <br>
} <br>
……<br>
在c/c++中,上述程序的输出结果为:<br>
the first k=1<br>
the second k=2<br>
the first x=1<br>
the first y=1<br>
the second x=2<br>
而在java中结果则大出所有人的意料,结果为:<br>
the first k=0 <br>
the second k=1 <br>
the first x=1 <br>
the first y=0 <br>
the first x=2 <br>
为什么呢?下面看看网友们的解答,从中我们可以看看大家对这个问题的理解:<br>
<font color="#0000FF"><br>
【发言1:】</font><br>
k=k++; // 等价于:k=k ; k=k+1;
<p>y=x++; // 等价于:y=x ; x=x+1; </p>
<p>System.out.println(--j); // 等价于:System.out.println( j ); j=j+1;
</p>
<p>while(i-->0){ ... //等价于 :while(i>0) { i=i+1; ..... </p>
<p>这是和 c 一样的基本语法 <br>
<br>
<font color="#0000FF">【发言2:】</font><br>
k=k++; // 等价于:k=k ; k=k+1; <br>
y=x++; // 等价于:y=x ; x=x+1; <br>
System.out.println(--j); // 等价于:System.out.println( j ); j=j-1;
<br>
while(i-->0){ ... //等价于 :while(i>0) { i=i-1; ..... <br>
<br>
<font color="#0000FF">【发言3:】</font><br>
不对,不对 <br>
显然当 k = k ++时,k++没有作用,只相当于k=k !!! <br>
java怎么会这么处理呢? 值得研究一下! <br>
<br>
<font color="#0000FF">【发言4:】</font><br>
据同事说在c语言里,以下几句的输出结果: <br>
…… <br>
int k=0; <br>
k=k++; <br>
System.out.println("the first k="+k);//0???? <br>
k++; <br>
System.out.println("the second k="+k); <br>
…… <br>
结果: <br>
the first k=1 <br>
the second k=1 <br>
这个结果比较好理解一点,可是java中的就不知道该如何理解了。 <br>
<br>
<font color="#0000FF">【发言5:】</font><br>
java里面好象k=k++就等于k=k。 </p>
<p><font color="#0000FF">【发言6:】</font><br>
k=k++ <br>
对于++这种表达式,并没有规定++运算是发生在哪一个时刻的,只规定是在取K值之后运算结束之前。我想现在是这样: <br>
首先取出K的值,此时为0,然后执行++运算,这时K=1,然后再执行=运算,将刚才取出的值“0”赋给K,相当于K=0。 <br>
所以运算结束后K应该为0 <br>
出现这样的结果原因我想主要就是没有规定++运算具体是在哪个时刻执行。 <br>
其实好像我看书的时候也提倡不要用这种有了++--运算之后还会参加其它运算的表达式,如:B=K++ + K++ <br>
<br>
<font color="#0000FF">【发言7:】</font><br>
好象在C语言中与JAVA中++与--不一样吧,我以前做过试验,同样的语句在C中与在JAVA中 <br>
的结果就是不一样的 <br>
<br>
<font color="#0000FF">【发言8:】</font><br>
k = k++确实是一条无用的语句 <br>
你可以试试 k += 1 我个人认为对k赋值还是用赋值运算符比较好 <br>
<br>
<font color="#0000FF">【发言9:】</font><br>
你为什么要使用k=k++这样的语句呢?你是想让k加一还是保留原值呢?保留原值就不要写 <br>
任何代码;想让k加一就用k++。 </p>
<p>i=j++; 等价于 </p>
<p>k=j; <br>
j=j+1; <br>
i=k; </p>
<p>如果把i=j++中的i换成j,则j=j++ <br>
k=j; <br>
j=j+1; <br>
j=k; <br>
结果就是j=j </p>
<font color="#0000FF">【发言10:】</font><br>
k=k++; 等价于:k=k+1 吗?, 我觉得不等于。
<p>好像应该这样 <br>
>>: i=i++ <br>
if: i=0; <br>
then: (i++)的值为:0; </p>
<p>0付给i 所以 i=0 </p>
<p>++ 发生在付值之前 不影响结果 </p>
<font color="#FF0000">【最终的解释:】</font><br>
What happens is that the initial value of x is stored in a temporary
register, then x is incremented, then the value stored in the register
is asigned to the left hand side of the expression, in this case the
LHS is x so x gets its original value.
<p>int x = 1; <br>
x = x++; <br>
Steps: <br>
1 initial value of x is stored in temp register. So temp = 1. <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -