当前位置: 技术问答>java相关
为什么是0?实在不明!
来源: 互联网 发布时间:2015-05-18
本文导语: public class Test{ public static void main(String[] args){ int i = 0; i+=i++; //i=i++; System.out.println(i); //0?!! } } | 当然是0了,i+=i++ i=i+i++ ,i一开始为0,运算后此时i也为0,如...
public class Test{
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
System.out.println(i); //0?!!
}
}
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
System.out.println(i); //0?!!
}
}
|
当然是0了,i+=i++ i=i+i++ ,i一开始为0,运算后此时i也为0,如果后面再有关于i的运算,i就会变为1,但是这个语句后没有这样的运算,只有 System.out.println(i); 所以i为0了!
|
i+=++i 时i为1
|
i++是先运算在使i+1;而++i是先使i+1在运算。
你System.out.println(i)实际上是显示了0(没有运算前i的状态)。
你要使他显示1只要吧i+=i++改成i+=++i就行了。
这是计算机的编程的基本知识阿。你要好好补补课了。
:)祝你进步
你System.out.println(i)实际上是显示了0(没有运算前i的状态)。
你要使他显示1只要吧i+=i++改成i+=++i就行了。
这是计算机的编程的基本知识阿。你要好好补补课了。
:)祝你进步
|
public class Test{
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
/* 如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0。但在本步骤中该算式右边的结果仍旧是0,你把0赋值给i,最后i当然就等于0了。
System.out.println(i); //0?!!
}
}
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
/* 如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0。但在本步骤中该算式右边的结果仍旧是0,你把0赋值给i,最后i当然就等于0了。
System.out.println(i); //0?!!
}
}
|
public class Test{
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
}
i+=i++ i=i+i++;
i++与++i的区别是 i++先使用i的值,再使i加1,而++i,是先给i加1,在使用i值。
i=i+i++ i=0+0(此时由于i++运算,i=1,但随后i又被重新付值 i=0)
如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0.
public static void main(String[] args){
int i = 0;
i+=i++; //i=i++;
}
i+=i++ i=i+i++;
i++与++i的区别是 i++先使用i的值,再使i加1,而++i,是先给i加1,在使用i值。
i=i+i++ i=0+0(此时由于i++运算,i=1,但随后i又被重新付值 i=0)
如果这儿是 j+=i++ , 那么在该步骤完成后i已经是1了,而j为0.
|
Java里的i++和c中的不一样!Java要到这次的操作完全结束才行。
|
因为i++执行在赋值语句之后
|
Java里的i++和c中的不一样?为什麽?都是先执行运算i 操作,然后i 值才进行加1操作。
|
这个问题不是解决了的吗?
看这个Java的字节码就知道了,就是楼顶的那个程序
Compiled from Test.java
public class Test extends java.lang.Object {
public Test();
public static void main(java.lang.String[]);
}
Method Test()
0 aload_0
1 invokespecial #1
4 return
Method void main(java.lang.String[])
0 iconst_0
1 istore_1
2 iload_1
3 iload_1
4 iinc 1 1
7 iadd
8 istore_1
9 getstatic #2
12 iload_1
13 invokevirtual #3
16 return
看这个Java的字节码就知道了,就是楼顶的那个程序
Compiled from Test.java
public class Test extends java.lang.Object {
public Test();
public static void main(java.lang.String[]);
}
Method Test()
0 aload_0
1 invokespecial #1
4 return
Method void main(java.lang.String[])
0 iconst_0
1 istore_1
2 iload_1
3 iload_1
4 iinc 1 1
7 iadd
8 istore_1
9 getstatic #2
12 iload_1
13 invokevirtual #3
16 return
|
我是这样认为的:通常的循环我们这样写
for(int i=0;i
for(int i=0;i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!