i的值为什莫不是11 class aaa{public static void main(String [] args){int i=10;i=i++;System.out.println(i);}} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议楼主在看下JAVA基础的知识。 i被赋值后可是自加了呀,所以应该是11吧把i=i++换成k=i++后,i的值就成11了,难道i=i++后i就不自加了吗? i=i++; 这一句相当于i =i ;i=i+1;两句合并后的结果 应该是10,i=i++;的赋值语句中,右边的值是10,所以赋给左边的变量i也是10,语句结束程序改造成如下,还是有同样的结果:class aaa { public static void main(String [] args) { int i=10; for(int j=0;j<10;j++){ i=i++; }System.out.println(i); } } i = i++;是先计算右边的表达式的值(值为10),然后执行i=i+1,i变成11,然后执行赋值运算i=10 比如我们再来看i=(i++)+(i);表达式i++的值是10,然后i变成11,所以第二个i是11所以右边表达式为10+11=21,最后执行赋值i=21 这是一道经典题,曾经是sun公司的一道面试题,实际上并不像一些人理解的那么简单,很多人回答也是正确的,int i = 10;i = i++;System.out.println("i= "+i);上面打印的结果是10,为什么不是11呢?①i=②i++时,我们称呼这两个i分别是①i与②i,当a=b++;时,b会先取值再赋值然后再自增,所以i=i++;②i会先把10复制给①i,然后②i在自增1变成11,那么为什么System.out.println("i= "+i);打印的是①i而不是②i的值呢?sun公司官方给的解释是:编译器并不认为赋值号左右2个i的地址相同的,当②地址的值加1后,以后就使用①i,而②i就消失。因此现在编程中,良好的编程风格是i = i+1;而不再单纯的i++. 我认为a=xxx的赋值操作在b自增之后,而不是之前否则i = (i++)+(i); 这个就不对了,自增在赋值之后就得不到正确结果 如果是这样的话:public class AAA{ public static void main(String [] args){ int i=10; int y=0; y=i++; System.out.println("y=" + y + ", i=" + i); }}那么y的值为10,而i的值为11,所以说java还是有点玄机在里面的 还是10楼说得比较有道理。我本来也觉得应该是11的。因为i=i++;是先作赋值运算,再做自增运算的。比如: int i=10,j; j=i++; System.out.println(i); System.out.println(j); 这里输出的是:1110但如果如10楼所说,打印的是①i而不是②i的值,那i的结果就是10了。 在Thingk in java中对于递增和递减是这样描述的:对于前缀++或者-- 应该是先执行运算再生成值 而后缀++或者--是先生成值在执行运算 要达到递增的结果,我们应该避免i=i++这种表达式(而应该用i++或i=i+1或k=i+1),它简直是个无效操作,我想10楼已经解释的很精确了。对于基本类型它唯一的作用就是改变存储此值的变量i在内存中的存储位置。正如以下代码:public static void main(String[] args){ int i=0; Integer i=new Integer(0)//结果一样 for(int k=0;k<5;k++){ i=i++; System.out.print(i);//输出结果都是0 } for(int k=0;k<5;k++){ i++; System.out.print(i);//输出结果0,1,2,3,4,5} i++,是先将i代入表达运算,当所有的运算完了以后,i再自加.++i,是先将i自加后,再将i的值代入表达式运算. 那这个又怎么解释呢??int i=1; i++;println(i);照你这么说这个就该等于1咯!!! 对哦!!竟然跟c/c++的执行流程不一样!!!#include<stdio.h>void main(){ int i=10; i=i++; printf("%d\n",i);}输出结果 11 这个跟C语言里的一样i=i++;这里,先进行i=i的赋值运算之后才是进行i+1运算。如果要让值为11的话,就应该改为:i=++i。 27楼说的很正确,不一样的编译器,不同的大的软件公司,甚至编程语言对于i=i++然后打印i,到底打印的是哪个i看法都是不一样的,不过sun公司认为打印的左边的i,那么咱们是学习java的,用的是sun公司的JVM当然是跟着sun公司走了,c++/c认为执行的是右i,不知道IBM是怎么的看法,只要注意到了这点疑惑性,以后编程培养自己的良好编程风格就行。 打印的不是1,是2,i++再打印i和i=i++再打印i是不一样的,i++是自增1后i不消失。i=i++等号右边的i赋值给左边i后,然后自增1后它就消失了,打印的是左边的i。 java里面的i=10的原因10楼说的很清楚,至于c里面为什么是11时因为编译器执行下面的步骤:i = i; //i = 10i++; //i =11 用循环创建一组Button, 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? JList 设置某行为选中状态的问题 提一个面向对象开发的百思不得其解的问题 几个JAVA基础的小问题,看看你理解如何,另外请教,当String A ="abc"; String B="abc" A 和 B是指向同一块内存吗? 如何读LDIF文件 一个简单的java程序 如何在eclipse中查看jdk源码,attach source完还是看不到怎么回事 菜鸟提问 Socket问题? 一个关于剪刀、石头、布的小游戏程序 求助!!各位高手!!
建议楼主在看下JAVA基础的知识。
这一句相当于
i =i ;
i=i+1;
两句合并后的结果
程序改造成如下,还是有同样的结果:
class aaa
{
public static void main(String [] args)
{
int i=10;
for(int j=0;j<10;j++){
i=i++;
}
System.out.println(i); } }
是先计算右边的表达式的值(值为10),然后执行i=i+1,i变成11,然后执行赋值运算i=10
表达式i++的值是10,然后i变成11,所以第二个i是11
所以右边表达式为10+11=21,最后执行赋值i=21
int i = 10;
i = i++;
System.out.println("i= "+i);
上面打印的结果是10,为什么不是11呢?①i=②i++时,我们称呼这两个i分别是①i与②i,当a=b++;时,b会先取值再赋值然后再自增,所以i=i++;②i会先把10复制给①i,然后②i在自增1变成11,那么为什么System.out.println("i= "+i);打印的是①i而不是②i的值呢?
sun公司官方给的解释是:编译器并不认为赋值号左右2个i的地址相同的,当②地址的值加1后,以后就使用①i,而②i就消失。
因此现在编程中,良好的编程风格是i = i+1;而不再单纯的i++.
我认为a=xxx的赋值操作在b自增之后,而不是之前
否则i = (i++)+(i); 这个就不对了,自增在赋值之后就得不到正确结果
public class AAA{
public static void main(String [] args){
int i=10;
int y=0;
y=i++;
System.out.println("y=" + y + ", i=" + i);
}
}
那么y的值为10,而i的值为11,所以说java还是有点玄机在里面的
我本来也觉得应该是11的。因为i=i++;是先作赋值运算,再做自增运算的。
比如: int i=10,j;
j=i++;
System.out.println(i);
System.out.println(j); 这里输出的是:
11
10
但如果如10楼所说,打印的是①i而不是②i的值,那i的结果就是10了。
对于前缀++或者-- 应该是先执行运算再生成值 而后缀++或者--是先生成值在执行运算
正如以下代码:
public static void main(String[] args){
int i=0;
Integer i=new Integer(0)//结果一样
for(int k=0;k<5;k++){
i=i++;
System.out.print(i);//输出结果都是0
}
for(int k=0;k<5;k++){
i++;
System.out.print(i);//输出结果0,1,2,3,4,5
}
++i,是先将i自加后,再将i的值代入表达式运算.
那这个又怎么解释呢??
int i=1;
i++;
println(i);
照你这么说这个就该等于1咯!!!
竟然跟c/c++的执行流程不一样!!!
#include<stdio.h>
void main()
{
int i=10;
i=i++;
printf("%d\n",i);
}
输出结果 11
i=i++;
这里,先进行i=i的赋值运算
之后才是进行i+1运算。
如果要让值为11的话,就应该改为:i=++i。
至于c里面为什么是11时因为编译器执行下面的步骤:
i = i; //i = 10
i++; //i =11