参数传递的主要应用
- 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);
}
}
当我们自己写了一个默认构造器(无参构造器)系统则不会继续提供默认构造器
假如你的自己写的默认构造器是这样
public PassArgument() {
a=1;
System.out.println("给a赋值了");
}
默认构造器的功能也会随着改变
事实上构造器相当于一个函数,但主要用来给对象的属性赋值,但如果自己有其他的想法也可以灵活处理。
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的值不会发生改变,
“引用”传递
当我们传入一个对象时
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);
}
}
pa里a的值增加了
原因如下
当传入pa时,函数复制一份pa,而复制后的pa和原来的pa都指向同一个a,也就是拥有同一个a,但实际上复制后的pa和原来的pa并不一样,如果我们给复制后的pa重新开括空间,这时,两个pa的a就不相同了
public void add(PassArgument p) {
p=new PassArgument();
p.a++;
}