参数传递的主要应用

  • java传参的原理
  • 构造器传参
  • 函数传参
  • 值传递
  • “引用”传递


java传参的原理

在java中参数的传递都是复制传递的,也就是先复制过后再传递,也就是说你传过来什么,它就复制什么,然后再用复制过来的数据进行操作

java 修改传入参数值 java传参默认值_赋值

构造器传参

构造器传参无非就是在新建对象时给对象的属性赋值,参数传入进来以后就可以直接给属性赋值。在没有写任何构造器的情况下,系统会提供一个默认构造器,基本类型就以0为默认值,引用类型如String,数组,接口则以null为默认值。

public class PassArgument {
	int a;
	String str;
	public static void main(String[] args) {
		PassArgument pa=new PassArgument();
		System.out.println(pa.a+" "+pa.str);
	}
}

java 修改传入参数值 java传参默认值_赋值_02


java 修改传入参数值 java传参默认值_java_03


当我们自己写了一个默认构造器(无参构造器)系统则不会继续提供默认构造器

假如你的自己写的默认构造器是这样

public PassArgument() {
		a=1;
		System.out.println("给a赋值了");
	}

java 修改传入参数值 java传参默认值_赋值_04


默认构造器的功能也会随着改变

事实上构造器相当于一个函数,但主要用来给对象的属性赋值,但如果自己有其他的想法也可以灵活处理。

public PassArgument(int a,String str) {
		this.a=a;
		this.str=str;
	}
	public static void main(String[] args) {
		PassArgument pa=new PassArgument(1,"hello world!");
		System.out.println(pa.a+" "+pa.str);
	}

如果只给一个属性赋值,其他属性则为默认值

函数传参

只要遵循复制传递原则,函数传参就很好理解了

值传递

public class change {
	public void add(int a) {
		a++;
	}
	public static void main(String[] args) {
		PassArgument pa=new PassArgument();
		System.out.println(pa.a);
		change chan=new change();
		chan.add(pa.a);
		System.out.println(pa.a);
	}
}

在这段代码中pa里a的值不会发生改变,

java 修改传入参数值 java传参默认值_System_05


java 修改传入参数值 java传参默认值_赋值_06

“引用”传递

当我们传入一个对象时

public class change {
	public void add(PassArgument p) {
		p.a++;
	}
	public static void main(String[] args) {
		PassArgument pa=new PassArgument();
		System.out.println(pa.a);
		change chan=new change();
		chan.add(pa);
		System.out.println(pa.a);
	}
}

java 修改传入参数值 java传参默认值_java 修改传入参数值_07


pa里a的值增加了

原因如下

当传入pa时,函数复制一份pa,而复制后的pa和原来的pa都指向同一个a,也就是拥有同一个a,但实际上复制后的pa和原来的pa并不一样,如果我们给复制后的pa重新开括空间,这时,两个pa的a就不相同了

public void add(PassArgument p) {
		p=new PassArgument();
		p.a++;
	}

java 修改传入参数值 java传参默认值_java_08