传值赋值,局部变量所在的栈内存会为该变量开辟一块新的内存空间,通过传来的值为内存进行初始化
传地址赋值,通常局部变量为引用变量,(数组引用变量/类引用变量),不会在方法栈内开辟对象的内存,只会在方法栈内开辟引用变量的内存空间,直接操作的是引用变量的地址值所指向的对象
实际上java不存在值传递和引用传递之说,存在的只是值传递而已,引用传递传递的也是值,只不过是地址值而已
1.值传递不可以改变原变量的内容和地址;
2.引用传递不可以改变原变量的地址,但可以改变原变量的内容;
根本原因:内存
值传递会在方法中开辟局部变量的内存,利用值传递为新开辟的局部变量初始化,局部变量有自己的地址
原变量只是将值传过去了
引用传递不会在方法中开辟对象的内存,只是会给局部的引用变量开辟内存空间,将地址值传递给局部引用变量,但是实际的指向是堆内存。