参考:值传递的内存解析.xlsx
1.调用方法传递基本数据类型
package com.atguigu.java2;
/*
* 形参:方法声明时的参数。
* 实参:方法调用时实际传给 形参的参数值。
*
* 值传递:调用方法时传递数据的方式
* 1.调用方法时如果传递的是基本数据类型,那么传过去的是具体对的值
* 2.如果传递的是引用数据类型那么传递的是该对象的地址值
*/
public class ValueTransferTest {
public static void main(String[] args) {
ValueTransferTest vt= new ValueTransferTest();
//需求:交换两个变量的值
int m =5,n = 10;
vt.swapData(m, n);
System.out.println("m=" + m + "n" + n);
}
/*
* 值传递:调用方法时传递数据
* 调用方法传递的是基本数据类型
*/
public void swapData(int m,int n){
System.out.println("sd交换之前m=" + m + "n" + n);
int temp = m;
m = n;
n =temp;
System.out.println("sd交换之后m=" + m + "n" + n);
}
}
运行结果:
2.调用方法传递引用本数据类型,传递的是地址值
package com.atguigu.java2;
/*
* 值传递:
* 调用方法时如果传递的是引用数据类型那么传递的是地址值
*/
class Number{
int m;
int n;
}
public class ValueTransferTest2 {
public static void main(String[] args) {
//创建对象
ValueTransferTest2 vt = new ValueTransferTest2();
Number number = new Number();
number.m =5;
number.n =10;
//调用方法交换数据
vt.swapData(number);
System.out.println("number.m = "+number.m+" number.n="+number.n);
}
public void swapData(Number number){
int temp = number.m;
number.m = number.n;
number.n =temp;
}
}
package com.atguigu.java2;
class Person{
String name;
}
public class ValueTransferTest3 {
public static void main(String[] args) {
int m=5;
int n=10;
n=10;
System.out.println("m=" + m + "n" + n);
System.out.println("---------------------------");
Person person = new Person();
person.name="小龙哥";
Person person2=person;//传递的是地址值
person2.name="小泽姐";
System.out.println(person.name);
System.out.println(person2.name);
}
}
运行结果: