public class MethodParameter01 { public static void main(String[] args) { int a = 10; int b = 20; AA2 obj = new AA2(); obj.swap(a,b); System.out.println("main方法 a=" + a + "\tb=" + b); } } class AA2{ public void swap(int a,int b){ System.out.println("a和b交换前的值:" + "a=" + a + "\tb=" + b); int tmp = a; a = b; b = tmp; System.out.println("a和b交换后的值:" + "a=" + a + "\tb=" + b); } }
a,b
的值是在main
方法中,要找的是main方法中的a和b的值,而主函数中的a,b并没有发生交换,所以是 a = 10,b = 20
public class MethodParameter02 { //编写一个main方法 public static void main(String[] args) { //测试 B b = new B(); int[] arr = {1, 2, 3}; b.test100(arr);//调用方法 System.out.println(" main的 arr数组 "); //遍历数组 for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); } } class B { //B类中编写一个方法test100, //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化 public void test100(int[] arr) { arr[0] = 200;//修改元素 //遍历数组 System.out.println(" test100的 arr数组 "); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); } }
内存分析法:
只要是调用一个方法就会产生一个新的栈
引用类型传递的是一个地址
B 类中编写一个方法 test200,可以接收一个 Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?答案:会变化
public class MethodParameter02 { //编写一个main方法 public static void main(String[] args) { //测试 BB b = new BB(); Person p = new Person(); p.name = "xdr630"; p.age = 22; b.test200(p); System.out.println("main 的 p.age=" + p.age); //10000 } } class Person{ String name; int age; } class B { public void test200(Person p){ person.age = 10000; } }
```java public class MethodParameter02 { //编写一个main方法 public static void main(String[] args) { //测试 BB b = new BB(); Person p = new Person(); p.name = "xdr630"; p.age = 22; b.test200(p); System.out.println("main 的 p.age=" + p.age); //10000 } } class Person{ String name; int age; } class B { public void test200(Person p){ p = null; } }