当前位置:  技术问答>java相关

i=i++问题

    来源: 互联网  发布时间:2015-09-07

    本文导语:  1、为什么结果为0?在C和C++中结果为1 int i=0; i=i++; System.out.println(i); 2、这里输出为3,为什么? int i=0; i=i++ + i++ + i++; System.out.println(i); 3、 int i[]; index=0; i[index]=index=5; 结果为什么是,i[0]=5; | ...

1、为什么结果为0?在C和C++中结果为1
int i=0;
i=i++;
System.out.println(i);

2、这里输出为3,为什么?
int i=0;
i=i++ + i++ + i++;
System.out.println(i);

3、
int i[]; index=0; i[index]=index=5; 结果为什么是,i[0]=5;

|
给你个例子
i=0;
i=i++ + i++ + i++ + i++ + i++;
System.out.println(i);

猜猜结果是什么?

答案就是i=0+1+2+3+4 =10

你的i=i++ + i++ + i++;之所以为3,是0+1+2,而不是1+1+1

java中对自增是取完i的值之后立即自增,而不是等整个表达式结束后再自增.

|
你还是没有好好看回贴......

i自加一后的值就是1了,但此时还没有给左边的变量i赋值,此时要赋给它的值是0(没意见吧..),所以最后i依旧是0


所以java与c的区别就是.....
c:
x=0;
y=(x++) + (x++) + (x++) + (x++) + (x++);

结果是y=0,x=5
x是在给y赋值后再进行自增操作的

java:
x=0;
y=(x++) + (x++) + (x++) + (x++) + (x++);

结果是y=10,x=5
x是在取出原值之后,立即自增,整个表达式的值计算完了之后,自增操作也完了,然后才是给y赋值.

所以,你的i=i++;想通了没有?


|
补充:2、不好意思,我看错了,i=i++ + i++ + i++;
按优先级划分还是
i=(i++)+ (i++) + (i++);
那么问题就是这么说:i++运算我想应该是这么说的,在执行i++操作中,若此步未结束,i值不变(也就是说未执行到行结束符号";"处,i值不变),那么就好解释了,i=(i++)+ (i++) + (i++);,再和1题相对,转换为i=3*(i+1);,那么结果就好理解了。

以上所解,未必正确!!!

|
我晕....

to: alphazhao(绿色咖啡) 
i=(i+(++i)+(++i))++;
这样都行啊
首先,他写的是i=i++ + i++ + i++;中间有空格的
其次,你这样写是语法错误

对于1
由于是先自增,所以i先是在表达式的右边自增为1,然后被赋值为0,最后的结果为0

对于3
编译时由左向右解析,为i[0],赋值时由右向左进行,均赋为5


|
据我所知,有的机子执行方式是不一样的,有的是从左向右做的,有的是从右往左做的,所以对I++的问题有两种不同的结果,最好的方法是在表达式I++中加上括号.象上面的问题我认为应该是机子执行方式引起的,
   对于第二个问题,我认为是对的.
          首先当开始运行时i为0,结果就变为i=0+1+1;再执行的时候就变为i=1+2(最后的i自动的加1),所以是等于3.
  第三个问题就更明显了,开始时i[0]=0,往后在执行就变成i[0]=5了.

  我认为你用的机子执行方式是从左到右的.

|
1.
int i =0;
i = i++;//i = 0 后缀先取值再自加一
i = ++i;//i = 1;前缀先自加一再取值
2.
int i=0;
i=i++ + i++ + i++;//i = 3;原理同上,'+'操作符顺序为左 -> 右。
3.
上面已经有很多了。

|
看这个例子,把它们的输出想通了之后,就自然明白了.......

看这个例子....
     
         int b = 0;
         int c1,c2,c3,c4,c5,c6;

b=0;
c1=b++;
System.out.println("NO c1"+": "+c1);

b=0;
c2=b++ + b++;
System.out.println("NO c2"+": "+c2);

b=0;
c3=b++ + b++ + b++;
System.out.println("NO c3"+": "+c3);

b=0;
c4=b++ + b++ + b++ + b++;
System.out.println("NO c4"+": "+c4);

b=0;
c5=b++ + b++ + b++ + b++ + b++;
System.out.println("NO c5"+": "+c5);

b=0;
c6=b++ + b++ + b++ + b++ + b++ + b++;
System.out.println("NO c6"+": "+c6);

|
1、为什么结果为0?在C和C++中结果为1
int i=0;
i=i++;
System.out.println(i);

我的想法.头一个因为他是先取值后加所以i的值还为零.

2、这里输出为3,为什么?
int i=0;
i=i++ + i++ + i++;
System.out.println(i);
答:我想这句可以写成这个样子.i=0+1+2
也就是说第一个i++是取值零.然后加1 第二个就变成了1......
所以等于三.



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明
  • 死锁的问题 多级锁定问题 循环锁定问题
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • [问题]双系统出现的问题!求问题的原因和解决办法!
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 初学者问题。一个是编译hello world的问题,一个是配置ssh的问题
  • c/c++服务器程序内存泄露问题分析及解决
  • C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
  • ​部署 Docker 前必须问自己的四个问题
  • swing的问题还是jbuiler的问题??
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 菜鸟第一次安装红帽子7.2的一箩筐问题。每个问题会开个帖子,各放100分!请有安装经验的老鸟们帮忙解决。第二个问题:什么是LILO?怎么样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,