黑马程序员技术交流社区
标题:
代码很少,但是搞不懂,请大神出手
[打印本页]
作者:
Ak-47
时间:
2016-3-30 00:52
标题:
代码很少,但是搞不懂,请大神出手
public class Demo13 {
public static void main(String[] args) {
int i = 1 ;
i = i++ ;
System.out.println(i);
}
}
这个i 的值是多少?为什么?我真是怕了啊{:2_31:}
作者:
LLQALLQ
时间:
2016-3-30 00:55
结果是1。i先自增再自增
作者:
守徒徒
时间:
2016-3-30 01:16
怎么也想不通,我觉得是2啊、。?大家怎么想的???
作者:
腾龙3158
时间:
2016-3-30 01:53
i = 1;先赋值再自增!
作者:
fea
时间:
2016-3-30 02:06
本帖最后由 fea 于 2016-3-30 02:19 编辑
输出的结果为1,但此时i也自增了,主要还是运算顺序的问题。把代码修改一下就不难理解,可以很清晰地看出来
public class Demo {
public static void main(String[] args) {
int i = 1 ;
int n;
n = i++ ;
System.out.println(i);
System.out.println(n);
}
}
复制代码
如不理解,请看下面两个例子。
注意:++和--有前置和后置两种写法
1.若运算符是
前置
于变量的,则变量先加1(或减1),再参与表达式中的运算。示例代码请看例1。
2.若运算符是
后置
于变量的,则变量先参与表达式的运算,再加1(或减1)。示例代码请看例2。
3.(1)例1:++i是在整个表达式之前进行计算的
class Demo1{
public static void main(String[] args){
int i = 10;
int n;
n = 10 * ++i; //先算i++即10+1等于11,再计算整个表达式10*++i,i的值为11,n的值为110
System.out.println("i的值为:" + i);
System.out.println("n的值为:" + n);
}
}
复制代码
(2)例2:在这个例子中i++是在计算整个表达式(10*i++)后计算的
class Demo2{
public static void main(String[] args){
int i = 10;
int n;
n = 10 * i++; //先算10*i即10*10等于100,再计算i++,i的值为11,n的值为100
System.out.println("i的值为:" + i);
System.out.println("n的值为:" + n);
}
}
复制代码
作者:
zhoubinjian
时间:
2016-3-30 02:20
结果是1,i=i+1,可以写为i=i,i=i+1,计算机底层的运算是从右往左的,也就是先赋值,此时i=1,接下来定义的int i=1,这个i再赋值一次,所以还是1
作者:
长衫造纸农_
时间:
2016-3-30 08:33
i++之后没有赋值,就是1,如果是++i就是2
作者:
sbqtvb2007
时间:
2016-3-30 08:56
亲。i=1的。先出去玩,再回来吃饭哦。 而不是吃完饭再出去玩的。
作者:
dmadboy
时间:
2016-3-30 09:17
int i = 3;
for(int j = 0; j < 5;j++){
i=i++;
}
System.out.println(i);
这个理解了,基本上就明白了
作者:
haitao
时间:
2016-3-30 09:50
就理解为先左赋值,后右自增。
作者:
zhangchao555
时间:
2016-3-30 10:25
加法在前面和在后面是不一样的,在后面 是先给 I 赋值 所以结果是1
作者:
onceIme
时间:
2016-3-30 15:22
i = i++; 可以分解成,i = i; i++,是先给一个i的内存空间时1,然后才执行++;所以i值就是1,就算多次循环都是一养的,你可以将前面和i和后面的i++看出是两个不同的变量;将这个变下,添加一个 int j;i = i++变成j = i++,然后你输出j和i,看下值就明白了,这种算是奇异的代码,最好少写
作者:
淡然无味
时间:
2016-3-30 15:28
i++是先赋值在自增的,先把 1 赋值给前面的 i ,然后再自增,所以输出的是1,你可以换成其他的变量观察
作者:
maikly
时间:
2016-3-30 18:03
i=1;先赋值后自增1!
作者:
卢磊磊
时间:
2016-3-30 18:12
1
作者:
霸道总裁爱村花
时间:
2016-3-30 18:44
个人觉得,这并不是两个变量,也不可以当作两个变量来理解。这个题在论坛上也出现很多次了,这涉及到内存分配的问题。i=i++在执行的时候会先开辟一个内存空间存储i的原值,然后i进行自增,最后再进行赋值,把原值赋给了自增后的i,所以i又变成了原来的值,所以无论自增多少次,最终i的值还是不变。i=i--也是这个执行过程
作者:
daniua
时间:
2016-3-30 19:31
1,如果是++1就是2
作者:
jiaojunwei
时间:
2016-3-30 19:46
++ 的运算等级比 = 高,先取 i 的值为 1 ,再 i 自增,此时 i == 2 ,再把取出来的 1 赋给 左边 ,此时 i == 1.
作者:
zhuzhibo
时间:
2016-3-30 19:50
当然是1了。。
作者:
wxf468907066
时间:
2016-3-30 20:45
不懂了....
作者:
小灰辉
时间:
2016-3-30 21:29
i=1;
首先 i = i++; i++ = 1;i++把值赋给i 也就是i=1;
所以i的值是1;
作者:
晴苑
时间:
2016-3-30 22:00
结果为 i = 1;
作者:
马儿不吃草
时间:
2016-3-30 22:06
这个必须是1 呀
作者:
陌丶
时间:
2016-3-30 22:58
++在前是先自增后运算 ++在后是先运算再自增
作者:
oassuperhan
时间:
2016-3-30 23:07
结果是1,因为i++操作会把值先保存在内存中,然后自加操作,再把操作前保存的值赋值给左面
作者:
兵蜂
时间:
2016-3-30 23:17
i=i++; 它的机制是 :
int backup =i ;
i = i+1 ;
i = backup ;
作者:
lavenderlmm
时间:
2016-3-30 23:25
结果是1:++在参与混合运算时,如果++放在变量后面,则先参与运算后改变值,所以会把1先复制给变量i
作者:
zapple926
时间:
2016-3-30 23:59
i =i++ 是先在内存中开辟一块空间储存i的原值1,接着i自增变成2,再将内存中的i的值1赋值给i。所以无论如果++符号在后面无论运算多少次i的值不变。
作者:
Ak-47
时间:
2016-3-31 01:27
看似很简单,其实涉及到很深啊{:2_32:}
作者:
Poul
时间:
2016-3-31 10:23
i=i++相当于temp=i;i=i+1;i=temp;
去这个帖子看看
http://bbs.itheima.com/thread-284605-1-1.html
作者:
ruigao1993
时间:
2016-3-31 10:33
结果为1,,因为i=i++; 先使用i的值并赋值给了i=1,
作者:
695010894
时间:
2016-3-31 10:44
搞清楚 i++和++i就好了..............
作者:
IT_china
时间:
2016-3-31 13:10
1,先把i赋值给i,然后i在自增1
作者:
freshnboy
时间:
2016-3-31 15:22
这个题经典,顶一个
作者:
木丶子李
时间:
2016-3-31 15:38
1,从右往左,读作把i赋值给i,定义int i=1,再自增
作者:
qq1091068107
时间:
2016-3-31 21:33
1啊,++在后边,就是先赋值 再自增
作者:
xiening123
时间:
2016-3-31 21:38
加油吧 多敲代码~~~~~~~~~~
作者:
妄想年少轻狂
时间:
2016-3-31 22:10
我理解的是涉及两个知识点
1,++(后)先运算再自增
2,赋值运算符优先级最低
也就是说,i++先把i的值1取出做运算(把这个1即为a),然后i自增变成2
然后赋值,把a(值为1)赋给i
结果i=1
作者:
菜菜的小猪
时间:
2016-3-31 22:25
这个主要是i++ 与++i的区别 分清就好
作者:
zq019633
时间:
2016-3-31 23:20
class Demo {
public static void main(String[] args) {
int i = 1 ;
int a1=1;
a1= i++ ;
System.out.println(a1);
System.out.println(i);
}
}
作者:
zq019633
时间:
2016-3-31 23:21
zq019633 发表于 2016-3-31 23:20
class Demo {
public static void main(String[] args) {
int i = 1 ;
输出结果 a1=1
i=2
作者:
lmr1096200234
时间:
2016-3-31 23:38
++放后面 意思是 先赋值后自增 即输出i=1 ++放前面是先自增后赋值i=2
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2