A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ak-47 中级黑马   /  2016-3-30 00:52  /  3021 人查看  /  41 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Demo13 {
        public static void main(String[] args) {
                int i = 1 ;
                i = i++ ;
                System.out.println(i);
        }
}
这个i 的值是多少?为什么?我真是怕了啊{:2_31:}

41 个回复

倒序浏览
结果是1。i先自增再自增
回复 使用道具 举报
怎么也想不通,我觉得是2啊、。?大家怎么想的???
回复 使用道具 举报
腾龙3158 来自手机 中级黑马 2016-3-30 01:53:31
板凳
i = 1;先赋值再自增!
回复 使用道具 举报
本帖最后由 fea 于 2016-3-30 02:19 编辑

输出的结果为1,但此时i也自增了,主要还是运算顺序的问题。把代码修改一下就不难理解,可以很清晰地看出来
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                 int i = 1 ;
  4.                 int n;
  5.                 n = i++ ;
  6.                 System.out.println(i);
  7.                 System.out.println(n);
  8.         }
  9. }
复制代码
如不理解,请看下面两个例子。
注意:++和--有前置和后置两种写法
1.若运算符是前置于变量的,则变量先加1(或减1),再参与表达式中的运算。示例代码请看例1。
2.若运算符是后置于变量的,则变量先参与表达式的运算,再加1(或减1)。示例代码请看例2。
3.(1)例1:++i是在整个表达式之前进行计算的
  1. class Demo1{
  2.         public static void main(String[] args){
  3.                 int i = 10;
  4.                 int n;
  5.                 n = 10 * ++i;  //先算i++即10+1等于11,再计算整个表达式10*++i,i的值为11,n的值为110
  6.                 System.out.println("i的值为:" + i);
  7.                 System.out.println("n的值为:" + n);
  8.         }
  9. }
复制代码
(2)例2:在这个例子中i++是在计算整个表达式(10*i++)后计算的
  1. class Demo2{
  2.         public static void main(String[] args){
  3.                 int i = 10;
  4.                 int n;
  5.                 n = 10 * i++;  //先算10*i即10*10等于100,再计算i++,i的值为11,n的值为100
  6.                 System.out.println("i的值为:" + i);
  7.                 System.out.println("n的值为:" + n);
  8.         }
  9. }
复制代码




回复 使用道具 举报
结果是1,i=i+1,可以写为i=i,i=i+1,计算机底层的运算是从右往左的,也就是先赋值,此时i=1,接下来定义的int i=1,这个i再赋值一次,所以还是1
回复 使用道具 举报
i++之后没有赋值,就是1,如果是++i就是2
回复 使用道具 举报
亲。i=1的。先出去玩,再回来吃饭哦。 而不是吃完饭再出去玩的。
回复 使用道具 举报
  int i = 3;
      for(int j = 0; j < 5;j++){
       i=i++;
      }
      System.out.println(i);
这个理解了,基本上就明白了
回复 使用道具 举报
就理解为先左赋值,后右自增。
回复 使用道具 举报
加法在前面和在后面是不一样的,在后面 是先给 I  赋值  所以结果是1
回复 使用道具 举报
i = i++; 可以分解成,i = i; i++,是先给一个i的内存空间时1,然后才执行++;所以i值就是1,就算多次循环都是一养的,你可以将前面和i和后面的i++看出是两个不同的变量;将这个变下,添加一个 int j;i = i++变成j = i++,然后你输出j和i,看下值就明白了,这种算是奇异的代码,最好少写
回复 使用道具 举报
i++是先赋值在自增的,先把 1 赋值给前面的 i ,然后再自增,所以输出的是1,你可以换成其他的变量观察
回复 使用道具 举报
i=1;先赋值后自增1!
回复 使用道具 举报
1            
回复 使用道具 举报
个人觉得,这并不是两个变量,也不可以当作两个变量来理解。这个题在论坛上也出现很多次了,这涉及到内存分配的问题。i=i++在执行的时候会先开辟一个内存空间存储i的原值,然后i进行自增,最后再进行赋值,把原值赋给了自增后的i,所以i又变成了原来的值,所以无论自增多少次,最终i的值还是不变。i=i--也是这个执行过程
回复 使用道具 举报
1,如果是++1就是2
回复 使用道具 举报
++ 的运算等级比 = 高,先取 i 的值为 1 ,再 i 自增,此时 i == 2 ,再把取出来的 1 赋给 左边 ,此时 i == 1.
回复 使用道具 举报
当然是1了。。
回复 使用道具 举报
不懂了....
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马