方法调用参数有两种方式:按值传递、引用传递
下面介绍一下这个两个方式的具体含义:
    1、按值调用:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了

    2、按引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

在java中参数传递都是按值传递

按照上面介绍所说,按值传递是传递值的拷贝;
来看一下以下代码

public class test {
	public static void main(String[] args) {
		user u = new user();
		test(u);
		System.out.print("1"+u);//1
		user u1 = new user();
		System.out.println("2"+u1);//2
		test1(u1);
		System.out.println("3"+u1);//3
	}	
	private static void test1(user u1) {
		u1 = null;
		System.out.println("方法中"+u1);
		
	}

	private static void test(user u) {
		// TODO Auto-generated method stub
		u.setId(10);
	}
	
}

输出结果:

1user [id=10, name=null, sex=null]
2user [id=0, name=null, sex=null]
方法中null
3user [id=0, name=null, sex=null]

可见当第一次调用 “test()” 方法时,将对象的id 属性修改为10,
从第二次输出可以看出:当对象刚创建时,他的各个属性都会有默认值,int为0,引用类型为null
从第三个输出调用"test1()" 方法中可以看出,当在方法中指定对象为null, 在方法中其值确实为null,但是并未有改变传入的参数的真正的指向

这就引出下面java中方法参数的使用情况

1.一个方法不能修改一个基本类型的参数(即数值型和布尔型)
2.一个方法可以改变一个对象参数的状态
3.一个方法不能让对象参数引用一个新的对象

至于java为什么是这样的,看下图:
首先注意,变量放在栈中,方法在方法区中,new出来的对象存放在堆中,但是对象所存的属性值在栈中

一 . 当第一次调用test方法时

java中参数调用方法有哪些方法有哪些 java怎么调用参数_java中参数调用方法有哪些方法有哪些


二 . 当调用test1()方法时

java中参数调用方法有哪些方法有哪些 java怎么调用参数_System_02