黑马程序员技术交流社区

标题: 关于i++和++i的问题求解 [打印本页]

作者: 公输子    时间: 2015-8-27 23:53
标题: 关于i++和++i的问题求解
                int i=3;
                  int s1 = (i++)+(i++)+(i++);
           System.out.println("s1 ="+s1+",i="+i );
                i=3;
                 s2=(++i)+(++i)+(++i);
           System.out.println("s2 ="+s2+",i="+i);
求解输出的s1和s2分别输出的是啥?为什么?


作者: Emerson    时间: 2015-8-28 00:08
第一个看成:

3 +  4  + 5

第二个看成:

4 + 5 + 6

懂了吧 ?
作者: 天使也掉毛    时间: 2015-8-28 00:11
++在前先自增1  ++在后先参与运算吧 !?
作者: 公输子    时间: 2015-8-28 00:13
Emerson 发表于 2015-8-28 00:08
第一个看成:

3 +  4  + 5

感谢大神,瞬间就明白了
作者: 公输子    时间: 2015-8-28 00:16
天使也掉毛 发表于 2015-8-28 00:11
++在前先自增1  ++在后先参与运算吧 !?

之前不知道i的值已经被改变,以为是3+3+3和4+4+4
作者: 疯疯疯疯疯子    时间: 2015-8-28 00:21
路过!!!!!
作者: 公输子    时间: 2015-8-28 00:22
疯疯疯疯疯子 发表于 2015-8-28 00:21
路过!!!!!

{:2_33:}在线等答案看来没戏了
作者: 凌端浩    时间: 2015-8-28 00:37
s1=12,i=6
s2=15,i=6
作者: 嘉嘉    时间: 2015-8-28 00:41
有点意思
作者: STARlove    时间: 2015-8-28 00:42
既然明白了。请教一下
int i =1;
i = i++;
syso(i);

结果?为什么?
作者: 公输子    时间: 2015-8-28 00:49
STARlove 发表于 2015-8-28 00:42
既然明白了。请教一下
int i =1;
i = i++;

是不是因为i++在表达式中先运算后自增,但是这里直接赋值后却直接输出了,没有运行自增。所以结果没有错误的话应该是1
作者: STARlove    时间: 2015-8-28 00:55
公输子 发表于 2015-8-28 00:49
是不是因为i++在表达式中先运算后自增,但是这里直接赋值后却直接输出了,没有运行自增。所以结果没有错 ...

自增是必须的一步。。不能不运行的
作者: 疯疯疯疯疯子    时间: 2015-8-28 09:20
公输子 发表于 2015-8-28 00:22
在线等答案看来没戏了

哈哈哈哈
作者: ln0491    时间: 2015-8-28 09:27
s1=12,s2=15
作者: Glc90    时间: 2015-8-28 09:33
单独使用时候 ++在前或者在后计算结果都一样
参与运算是 ++在前 先自增在带入数据运算
                ++在后 先带入数据 再自增
作者: 胡述灵    时间: 2015-8-28 09:47
楼上的说很清楚!
作者: Lonely_yu    时间: 2015-8-28 09:47
S1=12,i=6;s2=15,i=6;
作者: 安仔    时间: 2015-8-28 10:17
回答之前说一个最基本的问题,你的s2并没有定义,这样程序肯定会报错,找不到s2
下面回答问题:
第一次输出,s1=(i++)+(i++)+(i++);i的值是先进行运算再进行自加,所以s1=3+4+5=12
第二次输出,s2=(++i)+(++i)+(++i);i的值是先进行自加再进行运算,所以s2=4+5+6=15
over!
作者: yaochaoyang    时间: 2015-8-28 10:47
i++是先+1在赋值,++1是先赋值在加1
作者: yaochaoyang    时间: 2015-8-28 10:54
在编程中i++和++i最终是一样的,不过在循环体中,i++是先取出I,再加1,++i先加后取
作者: 公输子    时间: 2015-8-28 22:49
STARlove 发表于 2015-8-28 00:55
自增是必须的一步。。不能不运行的

我知道,如果赋值号右边的变量改成别的,然后再打印相应变量,结果就是2了.感谢大神教导
作者: 公输子    时间: 2015-8-28 22:57
yaochaoyang 发表于 2015-8-28 10:54
在编程中i++和++i最终是一样的,不过在循环体中,i++是先取出I,再加1,++i先加后取 ...

谢谢你的解答
作者: 公输子    时间: 2015-8-28 23:00
安仔 发表于 2015-8-28 10:17
回答之前说一个最基本的问题,你的s2并没有定义,这样程序肯定会报错,找不到s2
下面回答问题:
第一次输出 ...

感谢你的回答
作者: 三井寿    时间: 2015-8-28 23:03
我反正区分这个就是++i就是在读到这里进行+1,i++则是完成这句话后再+1.
作者: gpw    时间: 2015-8-28 23:17
楼主得分没有,怎么得技术分
作者: STARlove    时间: 2015-8-28 23:24
公输子 发表于 2015-8-28 22:49
我知道,如果赋值号右边的变量改成别的,然后再打印相应变量,结果就是2了.感谢大神教导 ...

加油。。。。。。。。。。。。。。。。。。。。。。。。。。{:3_66:}
作者: 绅士痞子    时间: 2015-8-28 23:29
正好我这个东西不太明白是怎么回事
作者: Qf-nice    时间: 2015-8-28 23:47
class Test000 {         public static void main(String[] args) {                  int i=3;           //3   //4   //5                   int s1 = (i++)+(i++)+(i++);            System.out.println("s1 ="+s1+",i="+i );                i=3;                                  //4   //5   //6               int  s2=(++i)+(++i)+(++i);            System.out.println("s2 ="+s2+",i="+i);                 //System.out.println("Hello World!");                          } }
作者: Qf-nice    时间: 2015-8-28 23:48
class Test000 {
        public static void main(String[] args) {
                 int i=3;           //3   //4   //5
                  int s1 = (i++)+(i++)+(i++);
           System.out.println("s1 ="+s1+",i="+i );
               i=3;
                                 //4   //5   //6
              int  s2=(++i)+(++i)+(++i);
           System.out.println("s2 ="+s2+",i="+i);
                //System.out.println("Hello World!");
               
        }
}
作者: 公输子    时间: 2015-8-28 23:51
Qf-nice 发表于 2015-8-28 23:48
class Test000 {
        public static void main(String[] args) {
                 int i=3;           //3   //4   //5

感谢{:2_30:}




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