- //验证i=j++和j=j++的不同,讨论j=j++的特性
- class Demo
- {
- public static void main(String[] args)
- {
- int i = 0,j = 0;
- i=j++;//先将j的值赋给i,然后j自增1;
- //也就是先i=j;然后j++;
- System.out.println("i ="+i);//所以这里i就是j自增之前的值,也就是0
- System.out.println("j ="+j);//这里的j是已经自增的j了,所以打印的应该是j=1
- //i=j++的执行顺序得到验证了
-
- System.out.println();
- j=0; //喜欢从0开始,再初始化一下
- j=j++;//如果按照上面的格式,那么应该是j=j;j++; 执行完毕后应该j=1;
- System.out.println("j ="+j);//但是得出的结果是j=0;这让我百思不得其解
- System.out.println();
- //然后听别人说,如果是在循环语句中j++后的值等待下次循环再赋值。好吧,那么我们再来看看
- j=0;
- for (int x=1;x<4 ;x++ )
- {
- j=j++;
- System.out.println("第"+x+"次循环 j ="+j);
- }
- System.out.println();
- System.out.println("循环结束后 j ="+j);
- //可以看出j=j++执行后,在这几种情况j的值最后都是0;跟我现在所认知的确实有点相悖
- /*
- 然后我开始在网上查资料,发现这个情况大家也是众说纷纭。接着又听说VC运行出的结果竟然是1!java的是0!
- 由于我没有装vc,所以没有去验证,但是因为多人都称结果就是如此,我先姑且相信。如果真的是这样,为什么会出现这样的情况,那就得问sun了
- 然后我在网上又找到一篇更靠谱的文章,里面的说法还是很有说服性的,说的应该是八九不离十了。跟大家分享下,这是篇百度文库里的文章。
- 由于比较长我就贴个网址,大家想看的自己去看看而已了
- http://wenku.baidu.com/link?url=rOr2VFrvIiVvG8sdLr3AejXmF7YzIoHcNPk_-aiTpu8DOjtcieBd1rz28swtZx4C1HVgDf5fiOZ46v1f_XiVqhSdrboL8wpUGqwjTOHxoSq
- 结论就是j=j++实在是个另类,这是java语言特性决定的,我们在用的时候要注意这一点就行了
-
- */
- //还有,一个关于++的问题,j++并不能单纯的认为就相当于j=j+1.起码j++是一次运算,j=j+1是两次运算了。
- //而且,如果j是byte或short类型的话,j=j+1是不能编译通过的,而j++还是可以。这里我也有点不明白,有谁知道的,还望告诉一声~
- }
- }
复制代码 |