两组实列——教你理解java值传递

 值传递

首先什么是值传递:

在java中 值的传递并不是字面上将一个变量的数值传递给另一个,而是将值的地址当成值来传递!

实例1

public class Student{
    private String name;
    private String name;
    public Student(String name ,int age){
        this.name = name;
        this.age = age;
    }
@Override
public string toString(){
    return name + age
    }
 public static void change(Student s1, Student s2){
    Student temp = new Student("王五",20);
    temp = s1;
    s1=s2;
    s2 = temp;
    }

public static void main(String[] args)
    Student zhangsan = new Student ("张三",18);
    Student lisi = new Student("李四",20);
    Student.change(zhangsan,lisi);
    System.out.println(zhangsan.toString());
    System.out.println(lisi.toString());
}

当main方法进入方法区后,我们创立zhangsan,lisi两处空间他们储存如下图所示

即lisi对应空间存储 0x4地址中的内容 ,zhangsan存储0x1地址中的内容

1.创立完成后,执行change 我们将定义的chang入方法区,它进而创立了Student 类型的temp,并调用main方法中的参数创立 s1,s2.

2.将s1,指向zhangsan对应的0x1,s2指向lisi对应的0x4.我们假设temp 对应存储空间0x5区域 ,

3.change方法实现了 s1 s2的交换,s1和s2 的指向交换。随后change退出方法区。

4.继续执行main方法,输出zhangsan,lisi为 张三,18 /李四,20

上述示例告诉我们,即使在函数中我们交换了两个信息,但对于java来说他只是传递了地址信息,变量的存储并未发生变化。

实例2

public class Student{
    private String name;
    private String name;
    public Student(String name ,int age){
        this.name = name;
        this.age = age;
    }
@Override
public string toString(){
    return name + age
    }
 public static void change(Student s1, Student s2){
    Student temp = new Student("王五",20);
    temp.name= s1.name;
    s1.name=s2.name;
    s2.name = temp.name;
    }

public static void main(String[] args)
    Student zhangsan = new Student ("张三",18);
    Student lisi = new Student("李四",20);
    Student.change(zhangsan,lisi);
    System.out.println(zhangsan.toString());
    System.out.println(lisi.toString());
}

1.首先执行main方法,创建zhangsan,lisi。存储同实例1.

2.唯一的改变就是,交换——change中变成了 s1.name, s2.name也就是说,将s1指向的0x1中的存储name的地址0x2同s2中的0x4 中的0x3交换,也就是说0x1中现在 0x3 18  0x4存储 0x2 20

如下图所示

3.继续指向main方法,输出zhangsan lisi,此时他们指向的0x1 和 0x4内容发生改变 输出:李四18,张三20

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值