目录
Java方法传参机制
基本数据类型的传参机制
-
如果方法中的形参是基本数据类型,则是值传递,形参的改变不影响实参。
-
每创建一个新的方法就会开辟一个新的栈空间存放。
public class Demo02 {
public static void main(String[] args) {
int a = 10;
int b = 20;
AA aa = new AA();
aa.swap(a,b);
System.out.println("a="+a+"\tb="+b);
}
}
class AA {
public void swap(int a,int b) { //此a、b非彼a、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);
}
}
引用数据类型的传参机制
-
如果方法中的形参是引用数据类型,则是地址值传递,形参的改变会影响实参。
-
数组和对象作为形参,都属于引用数据类型,存放在堆中。、
数组作为形参:
public class Demo03 {
public static void main(String[] args) {
B b = new B();
int[] arr = {1,2,3};
b.test(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 {
public void test(int[] arr) {
arr[0] = 200;
System.out.println("test的arr数组");
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
}
}
对象作为形参:
public class Demo04 {
public static void main(String[] args) {
Person p = new Person();
p.name = "jack";
p.age = 10;
System.out.println("main前的p.age="+p.age);
C c = new C();
c.test(p);
System.out.println("main后的p.age="+p.age);
}
}
class Person {
String name;
int age;
}
class C {
public void test(Person p) {
p.age = 10000;
}
}
将语句p.age = 10000; 改为 p.age = null;
public class Demo04 {
public static void main(String[] args) {
Person p = new Person();
p.name = "jack";
p.age = 10;
C c = new C();
System.out.println("main前的p.age="+p.age);;
c.test(p);
System.out.println("main后的p.age="+p.age);
}
}
class Person {
String name;
int age;
}
class C {
public void test(Person p) {
p = null;
}
}
创建了一个新的对象,在堆中开辟了新的空间,p指向新的地址
public class Demo04 {
public static void main(String[] args) {
Person p = new Person();
p.name = "jack";
p.age = 10;
C c = new C();
System.out.println("main前的p.age="+p.age);;
c.test(p);
System.out.println("main后的p.age="+p.age);
}
}
class Person {
String name;
int age;
}
class C {
public void test(Person p) {
p = new Person();//创建了一个新的对象,在堆中开辟了新的空间,p指向新的地址
p.name = "tom";
p.age = 99;
}
}