public class Inc{
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);
i = i++;
i=i++; System.out.println(i);
}
void fermin(int i){
i++;
}
}结果还是0,在main中无论加多少条i=i++;结果都是一样,为什么????????
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
inc.fermin(i);
i = i++;
i=i++; System.out.println(i);
}
void fermin(int i){
i++;
}
}结果还是0,在main中无论加多少条i=i++;结果都是一样,为什么????????
inc.fermin(i); //这里对i无影响,看看调用就知道
i = i++; //这里i++虽然i自加了,但是i后来又被复制回去了
i=i++; //即i还是原来的 i
2. i++指,先显示后计算,所以i = i++,也就等于i = i
把代码改成这样
public static void main(String argv[]){
Inc inc = new Inc();
int i =0;
i = inc.fermin(i);
System.out.println(i);
}void fermin(int i){
i++;
}
或是
public static void main(String argv[]){
int i =0;
i++;
System.out.println(i);
}
第一,变量生存期。
void fermin(int i){
i++;
}
这里的自增只是对于方法参数i的自增。
第二,自增运算符的使用
i=i++;
这句意思是把i的值先赋值给i,再对i自增1。
但是,自增运算符的优先级比赋值高。所以再赋值时i其实已经加了1。再将i赋值成0。这样无论加多少条i=i++;结果都是一样的。
如果改成i++;或i=++i;就能够实现自增了。
其实这个用单步调试,很容易就解决了。
++i是先自增,后参与表达式计算,
比如: i=1,j=2
k=(++i)+j;//结果是k=4,i=2
k=(i++)+j;//结果是k=3,i=2
程序应该为:
public class Inc
{
public static void main(String argv[])
{
Inc inc = new Inc();
int i =0;
i = inc.fermin(i);
System.out.println(i);
} int fermin(int i)
{
i++;
return i;
}
}