黑马程序员技术交流社区

标题: ++问题,有人问了,可是没看懂,还得自己发帖来问。 [打印本页]

作者: 18643448863    时间: 2014-10-10 07:26
标题: ++问题,有人问了,可是没看懂,还得自己发帖来问。
本帖最后由 18643448863 于 2014-10-11 09:09 编辑

x=j++  和j =j++ 运行有什么不同,而j=j++ 和j=j;j=j+1;运算上不一样么?


复制代码


作者: 不系之舟王    时间: 2014-10-10 08:40
没在电脑旁,没法运行下。感觉上,j=j++应该会出错,j++后j自增,而j++值不变
作者: 不系之舟王    时间: 2014-10-10 08:54
抱歉,我说错,刚看到别人的帖子,现在明白了。
x=j++意思是把j++的值赋给x
j=j++也是把j++的值赋给j(因为j始终是个变量,我在沙发上的解答错在=和==上了)
j=j+1也是每次j增加1赋给j
lz只要记得 j++是每次j的值自增,而j++的值不变。++j是每次j的值自增,而++j的值也自增,j和++j同步变化
这种题就都理解了
作者: 笑脸迷人    时间: 2014-10-10 23:18
http://blog.163.com/panxianrong1989104@126/blog/static/1074217792014910103751862/
我的blog,看看吧~写的应该算是比较详细了~
作者: 18643448863    时间: 2014-10-11 09:08
笑脸迷人 发表于 2014-10-10 23:18
http://blog.163.com/panxianrong1989104@126/blog/static/1074217792014910103751862/
我的blog,看看吧~ ...

谢谢,能理解了,呵呵,有没有亲友卷的消息,难道真要写Blog了?
作者: LFW    时间: 2014-10-11 19:12
j=j++》》》》 j自己增加1 变成1;然后将自增前的0又赋值给j 所以j=j++ 始终为 0
作者: Quasimodo    时间: 2014-10-11 20:09
  1. //验证i=j++和j=j++的不同,讨论j=j++的特性
  2. class  Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int i = 0,j = 0;
  7.                 i=j++;//先将j的值赋给i,然后j自增1;
  8.                           //也就是先i=j;然后j++;
  9.                 System.out.println("i ="+i);//所以这里i就是j自增之前的值,也就是0
  10.                 System.out.println("j ="+j);//这里的j是已经自增的j了,所以打印的应该是j=1
  11.                                 //i=j++的执行顺序得到验证了
  12.                
  13.                 System.out.println();
  14.                 j=0; //喜欢从0开始,再初始化一下
  15.                 j=j++;//如果按照上面的格式,那么应该是j=j;j++; 执行完毕后应该j=1;
  16.                 System.out.println("j ="+j);//但是得出的结果是j=0;这让我百思不得其解
  17.                 System.out.println();

  18.                 //然后听别人说,如果是在循环语句中j++后的值等待下次循环再赋值。好吧,那么我们再来看看
  19.                 j=0;
  20.                 for (int x=1;x<4 ;x++ )
  21.                 {
  22.                         j=j++;
  23.                         System.out.println("第"+x+"次循环 j ="+j);
  24.                 }
  25.                 System.out.println();
  26.                 System.out.println("循环结束后 j ="+j);
  27.                 //可以看出j=j++执行后,在这几种情况j的值最后都是0;跟我现在所认知的确实有点相悖

  28.                 /*
  29.                   然后我开始在网上查资料,发现这个情况大家也是众说纷纭。接着又听说VC运行出的结果竟然是1!java的是0!
  30.                   由于我没有装vc,所以没有去验证,但是因为多人都称结果就是如此,我先姑且相信。如果真的是这样,为什么会出现这样的情况,那就得问sun了
  31.                   然后我在网上又找到一篇更靠谱的文章,里面的说法还是很有说服性的,说的应该是八九不离十了。跟大家分享下,这是篇百度文库里的文章。
  32.                   由于比较长我就贴个网址,大家想看的自己去看看而已了
  33.                   http://wenku.baidu.com/link?url=rOr2VFrvIiVvG8sdLr3AejXmF7YzIoHcNPk_-aiTpu8DOjtcieBd1rz28swtZx4C1HVgDf5fiOZ46v1f_XiVqhSdrboL8wpUGqwjTOHxoSq
  34.                  结论就是j=j++实在是个另类,这是java语言特性决定的,我们在用的时候要注意这一点就行了
  35.                  
  36.                  */
  37.                 //还有,一个关于++的问题,j++并不能单纯的认为就相当于j=j+1.起码j++是一次运算,j=j+1是两次运算了。
  38.                 //而且,如果j是byte或short类型的话,j=j+1是不能编译通过的,而j++还是可以。这里我也有点不明白,有谁知道的,还望告诉一声~
  39.         }
  40. }
复制代码

作者: 小小程序员    时间: 2014-10-11 22:27
关于自增和自减 前++和后++,前--后--,在只做一种运算的时候都是自增1和自减1;当存在其他的运算的时候(拿++为例)前++它是先自身自增1之后在进行其他运算。而后++,是先进行其他运算在进行自增1;(--同理)。x=j++:是先将就j赋值给x,然后j在自增1;也就是j比x大1。对于 j = j++你可以自己想想。
作者: 千里马    时间: 2014-10-11 23:32
Quasimodo 发表于 2014-10-11 20:09

领教了,不错!
作者: da_chuan    时间: 2014-10-11 23:41
x=j++  和j =j++ 运行有什么不同,而j=j++ 和j=j;j=j+1;运算上不一样么?

x=j++  等价于---->先赋值 x=j ,再自加j++;
j =j++  ---->j=j+1
作者: javaAndroid    时间: 2014-10-12 00:23
楼主说的是++j和j++的问题么?
这两个也就是先加和后加的问题
分几个情况都以j++和++j为例
1、如果j++或者++j都是作为单独的语句存在,
类似于这样
int j=0;     // 语句1
j++;     //语句2
++j;    // 语句3
这里语句2和3效果是一样的,都是让j自增1.
2、j++和++j在赋值语句里
类似于
int i=0;
int j=2;
i=j++;
和i=++j;
上面的
i=j++;和i=++j;
区别在于前者先把j的值赋给i之后,j再自增1。
后者是先将j自增1,然后再把自增之后的值赋给i。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2