8大基本数据类型为 值传递
类和数组为 引用传递,传递的是地址
但是要注意虽然类是引用传递,但是要注意,调用方法是新开一个栈
因此如果进行p = null或者 Person p = new Person()等语句,要格外注意:
- 如果主函数再次输出对象p的属性,此时输出的仍是主栈指向的内容
- 如果在调用函数输出对象p的属性,此时输出的是新栈指向的内容
(p在哪调用,就找哪个栈里的p)
代码如下:
//2024.07.08
public class MethodExercise03 {
public static void main(String[] args) {
B b = new B();
Person p = new Person();
p.name = "liming";
p.age = 18;
b.test1(p);
System.out.print("main:p=18,After executing p.age=100: ");
b.print(p);
p.age = 18;
b.test2(p);
System.out.print("main:p=18,After executing p=null: ");
b.print(p);
p.age = 18;
b.test2(p);
System.out.print("main:p=18,After executing Person p = new Person(): ");
b.print(p);
}
}
class Person {
String name;
int age;
}
class B {
public void print(Person p){
System.out.println("name = " + p.name + ", age = " + p.age);
}
public void test1(Person p){
p.age = 100;
}
public void test2(Person p){
p = null;//不抛出exception
}
public void test3(Person p){
p = new Person();
}
}
运行截图:
图解说明:
-
test1
-
test2
-
test3