关于java值传递的问题

怎么来理解java中的值传递,为什么被传递的对象的之不会改变?

值传递,相当于开了一个新的局部变量,在函数中的操作都是对此局部变量的。
所以出了函数,局部变量消失了,不会影响被传递的对象。

Java的方法调用是通过栈结构来完成的,每个方法都是一个栈帧,这个栈帧也包含一个操作数栈、参数类型、返回值等数据信息。某个方法调用另一个方法,参数传递是通过寄存器完成的,调用之前先把寄存器变量的值压入自己的操作数栈中,被调用方法加载同一个寄存器变量获取参数值。当方法返回时,调用者栈顶的值仍然是传递之前的值。
我写了一个简单的Java类如下:
public class Pass {
public static void main(String []args){
int i=10;
Pass p=new Pass();
p.method(i);
System.out.println(i);
}
public void method(int x){
x = x+1;
System.out.println(x);

}
}
通过javap -c Pass反编译分析字节码如下:
图片说明
main方法和method方法访问参数都是同一个寄存器变量1的值,但是main在调用方法method之前已经把寄存器的值压入自己的操作数栈中了,它操作的是自己栈顶的元素,调用完method方法之后,iload1将自己栈顶的值存入寄存器变量中。所以,值传递参数不会影响调用者中该变量的值。

所有的值传递都一样,都是在栈里面拷贝变量得值,你之后的操作都是对这个栈中拷贝进行的
这种情况下当然不会对源有任何影响。

值传递就是一个变量赋值给另一个变量相当于完全拷贝了一份内存副本,结果是两个不同的内存各有一份相同的数据。修改一个变量自然不影响另一个。
引用传递就是一个变量赋值给另一个变量,拷贝了一份引用,两个引用指向相同的内存,真正的数据只有一份,只是多了一个对它的引用。通过任何一个修改,所有指向它的引用都能看到变化。