案例1:
代码
public class A {
public static void main(String[] args) {
String name1="张三";
name(name1);
System.out.println("name"+name1);
}
public static void name(String name){
name="李四";
System.out.println("name"+name);
}
}
运行结果:
运行过程:
1.main方法入栈
2.创建变量name1,变量指向字符串常量池当中”张三“这个字符串的地址
3.调用静态常量池当中的name方法
4.将name1的值,也就是0x1传递给入参name
5.name="李四"; 将字符串常量池当中”李四“的地址值传递给入参name1
6.输出”name李四“
7.name方法出栈,
8.输出"name张三"
案例2:
代码:
public class Person{
private String name1;
private int age;
public Person(String name1, int age) {
this.name1 = name1;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name1='" + name1 + '\'' +
", age=" + age +
'}';
}
public static void name(Person person){
person.age=20;
person.name1="李四";
person=null;
}
public static void main(String[] args) {
Person person=new Person("张三",18);
System.out.println(person.toString());
name(person);
System.out.println(person.toString());
}
}
运行结果:
运行过程:
1.main方法入栈
2.创建Person类的对象person
输出person对象 “name1='张三',age=18"
3.name方法入栈
4.将person的值(即创建对象的地址值)传递给入参person
5.此时入参person和创建的变量person指向同一个地址值
6.person.age=20;
person.name1="李四";
对创建对象的name值和age进行修改
2.将name方法中的变量person置空,name方法出栈,输出“name='李四',age=20
案例3:
代码:
public class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name="+name+",age="+age+"]";
}
public static void change(Person p1,Person p2){
Person temp=new Person("王五",20);
temp=p1;
p1=p2;
p2=temp;
}
public static void main(String[] args) {
Person zhangsan =new Person("张三",18);
Person lisi =new Person("李四",20);
Person.change(zhangsan,lisi);
System.out.println(zhangsan.toString());
System.out.println(lisi.toString());
}
}
运行结果:
运行过程:
1.main方法入栈
2.创建对象zhangsan
3.创建对象lisi
4.change方法入栈,将zhangsan lisi变量的值传给p1和p2,
5.创建对象temp,给其赋值
6. temp=p1;
p1=p2;
p2=temp;
进行相应值的传递
7.change方法出栈
8.输出zhangsan lisi的值
案例4:
代码:
class Two{
byte x;
}
public class Student {
public static void main(String[] args) {
Student student=new Student();
student.start();
}
void start(){
Two two=new Two();
System.out.print(two.x+" ");
Two two2=fix(two);
System.out.println(two.x+" "+ two2.x);
}
Two fix(Two tt){
tt.x=42;
return tt;
}
}
运行结果:
运行过程:
1.main方法入栈
2.创建一个student对象
2.调用start方法,创建一个two对象,因为byte类型是整形数据,默认值为0
3.输出two.x,也就是0
4.创建一个变量two2
5.调用fix方法,方法当中有一个入参tt,将two的值传给入参
6. tt.x=42;将tt指向的x值变为42
7.返回tt的值给two2,fix方法出栈
8.此时two和two2指向同一个对象,输出的x值均为42
9.start方法出栈
10.main出栈,程序结束