java中的方法可以传递参数,参数传递的方法就是值传递。
参数又分为实参和形参。
实参:调用方法时,传递的参数叫实参。调用方法时,会把实参传递给形参,方法内部实际上使用形参。
形参:定义方法时,写的参数叫形参。
值传递:当参数是基本类型时,传递参数的值,传递i=5,会把5这个值赋值给形参。
当参数是对象时,传递的是对象的地址值,就是把对象的地址值赋值给形参。
基本类型作为参数传递
public class Test01 {
public void change( int a){
System.out.println("方法中a 的初始值"+a);
a= 20;
System.out.println("方法中a 的新值"+a);
}
public static void main(String[] args) {
int a = 10;
Test01 t = new Test01();
t.change(a);
System.out.println("方法执行后的值"+a);
}
}
在java中基本数据类型遵循值传递,所以在t 在调用change()方法时, 只是将原数据a的副本传给方法中的参
数,第一时间原本和副本a的值都是10, 在执行到a=20后,副本a的值变成了20。所以运行结果为:
方法的传参过程:
(1)main方法是程序的入口,先分配实参变量的内存空间并初始化。
(2)调用change()方法,为change()方法的形参变量分配内存空间。
(3)将实参变量的数值赋值给对应的形参变量。
(4)执行change()方法的方法体,执行完毕后释放形参变量的内存空间。
(5)main方法得到change()方法的返回值后并继续向下执行。
(6)当main方法执行完后,释放实参变量的内存空间。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPlkVwUE-1588351687966)(C:\Users\YangJian\Desktop\微信图片_20200502002514.png)]
当使用基本数据类型作为方法的形参时,在方法体内对形参的改变不会影响到实参的值。
引用类型作为参数传递
引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。
但String类例外,String字符串比较特殊,也属于引用传递,但是他作为参数传递,是值传递。
public class MyTest {
public static void main(String[] args) {
//引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。(String例外,String属于值传递)
//但是String字符串比较特殊,虽说String是引用类型。但是他作为参数传递,属于值传递。
String str="abc";
test(str);
System.out.println(str); //2 abc
System.out.println("================================");
//引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。
StringBuffer sb = new StringBuffer("好好学习");
test(sb);
String string = sb.toString();
System.out.println(string);
}
private static void test(StringBuffer ss) {
ss.append(",天天向上");
System.out.println(ss.toString());
}
private static void test(String s) {
s+="我爱你";
System.out.println(s); //1 abc我爱你
}
}
基本数据类型和引用数据类型作为参数的区别:
1.基本数据类型的变量中直接存放数据本身,所以改的时候改的是数据本身。
2.但是引用类型不同的地方在于真正的数据并没有栈区的变量中保存,而是在堆区里面保存,虽然也复制了一份,也是副本,二者指向的是同一块内存空间。
3.引用数据类型就比如说:两个同学使用的是同一份复习资料,其中一人把资料撕毁了,另一个当然也会受到影响。而基本数据类型就是复制了一份,其中一人把资料撕毁了,并不影响另一个人。
总结:
1).当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
2).当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会
对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;*
3).当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会
对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区;*
值产生影响,因为形参变量和实参变量共享同一块堆区;*
3).当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会
对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区;*