java中为什么x的输出为20 而 i 的输出为10

public class Pass {
static int j=20;
public static void main(String []args){
int i=10;
Pass p=new Pass();
p.method(i);
System.out.println(i);
System.out.println(j);

}
public void method(int x){
    x=x*2;
    j=j*2;
    System.out.println(x);
}

}

p.method(i); 此时传人的i=10; 这是执行方法的结果为20;
i不变i=10,此时继续执行输出语句i=10, j=20

很简单,因为java中int传递的是值,改变函数内的x,不会实际改变i

你的问题更进一步的回答可以看
http://ask.csdn.net/questions/172456
和你的问题本质上一样

类似C语言的值传递和地址传递吧,

在java中有两种传递方式,一种是按引用传递,一种是按值传递。
在调用函数的时候,你的i和x是按值传递的,就是说,x创建了1个i的副本,复制的是地址!
x的变化跟i没有关系。

而按引用传递是复制指针,而不是地址!如果x的地址变了,那么i和x的指针都会指向新的同一个地址,则x和i值还是一样。

在java中调用函数的时候,参数都是按值传递的,只要记住这点以后就不会犯错了!

i=10传给x,x=10*2=20,所以输出20,i此时还是10,直接输出10

对,传递的是一个值,不会改变原来地址所存储的值

java中的传递,是传递的拷贝
i那个地址块存的是数值10,而不是地址,拷贝后的值传递给x也就是x等于10
所以方法中打印的x是20,但i依然是10
如果传递的参数是对象类型的话,那么传递的是对象的地址的拷贝

这个问题你应该说说哪里不懂,你的思路咋样地,这个确实无法给你解释,怎么分析怎么那样的值啊。

Java参数传递分为值传递和引用传递,基本数据类型传递的是数值的拷贝。JVM运行Java代码时,是以栈这种数据结构完成方法调用的,每个方法都是一个栈帧,有自己操作数栈,它操作的形参的初始值是调用方法传递过来的,只是复制了一份存放在自己的操作数栈中。main方法i的值和method方法中形参的值i是不同的存储区域。所以method方法修改i之后对main方法没有影响。即:数值传递不会改变原来参数的值。

你给X重新复制了啊,x=x*2; X=10*2=20;而i没有重新复制,它还是10