java i++的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 21:58:58
public class Inc {
public static void main(String[] args){
Inc inc = new Inc();
int i=0;
inc.fermin(i);
i = i++;
System.out.print(i);
}
void fermin(int i){
i++;
}
}

打印的结果为什么是0 啊。很不了解

void fermin(int i){
i++;
}
这个函数是值传递,函数内部改变数值不会改变外部变量i的值,所以inc.fermin(i);之后,i还是0.
然后 i = i++;该句结果 i=0 该句等价于temp=i; i++ ; i=temp 所以i=0
最后打印i的值自然是0

j = j++;

大概该语句的作者是想让它执行对j的值加1的操作,也就是表达式j++所做的操作。遗憾的是,作者大咧咧地将这个表达式的值有赋回给了j。
当++操作符被置于一个变量值之后时,其作用就是一个后缀增量操作符(postfix increment operator)[JLS 15.14.2]:表达式j++的值等于j在执行增量操作之前的初始值。因此,前面提到的赋值语句首先保存j的值,然后将j设置为其值加1,最后将j复位到它的初始值。换句话说,这个赋值操作等价于下面的语句序列:

int tmp = j;
j = j + 1;
j = tmp?;

————————摘自《java解惑-谜题25》

int,float等基本类型是值传递,不是对象传递
也就是说你调用fermin(int i)只是传递进去了一个值而不是i本身
对i本身没有任何影响

再次 你 i = i++; 中的i++指的是 使变量i返回当前值,然后自增
如果你这样写 i++;或者i = ++i; System.out.print(i);
这样i就是1了

参数传递时有问题,

还有i++和++i是有区别的。

值传递和地址传递的区别,因为你这是值传递,没有改变原来的i的地址,所以,调用完方法后,虽然i的值已经加1但是在原来地址的i的值其实是没有变的,回到原方法在执行i++其实还是操作的原地址的i,另外i=i++,这个等式是在将左边的值i=0赋给右边之后左边的i才加1,故而最终打印i仍为0

void fermin(int i){
i++;
}
里面的i和外面的i是两个不同的变量。