码迷,mamicode.com
首页 > 编程语言 > 详细

Java的传值机制

时间:2020-01-04 18:05:40      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:传递   string   temp   结果   ring   public   注意   一段   nbsp   

不管多好的总结都比不上一段代码

我们先来看看基本类型的实例变量的传值机制

创建一个Student类

 1 public class Student {
 2     int age=18;
 3     String name="Jack"; 4 }

尝试将基本类型实例变量age当做参数传入方法,在方法内修改参数的值,从而修改age的值

构造一个changeAge方法

1 public void changeAge(int in) {
2         in=0;
3     }

 在main方法中实例化一个Student对象stu,调用changeAge方法来改变stu的age

1      Student stu=new Student();
2         System.out.println("尝试改变前stu的age:"+stu.age);
3         stu.changeAge(stu.age);
4         System.out.println("尝试改变后stu的age:"+stu.age);

运行结果:

  • 尝试改变前stu的age:18
  • 尝试改变后stu的age:18

发现age的值没有改变,猜想传入方法中的参数只是age的一个副本而不是age本身

在main方法中直接更改age

1   System.out.println("尝试改变前stu的age:"+stu.age);
2   stu.age=0;
3   System.out.println("尝试改变后stu的age:"+stu.age);

运行结果:

  • 尝试改变前stu的age:18
  • 尝试改变后stu的age:0

age发生了改变,证明是传入时出了问题,传的是副本。

我们再来看看引用类型的实例变量的传值机制

尝试将引用类型实例变量name当做参数传入方法,在方法内实例化一个新的对象并将该对象的地址传给参数,从而修改name的指向

构造一个changeName方法

public void changeName(String str) {
        String temp="null";
        str=temp;
    }

在main方法中调用changeName方法来改变stu的name

1         System.out.println("尝试改变前stu的name:"+stu.name);
2         stu.changeName(stu.name);
3         System.out.println("尝试改变后stu的name:"+stu.name);

运行结果:

  • 尝试改变前stu的name:Jack
  • 尝试改变后stu的name:Jack

发现name并没有改变,指向的仍旧是原来的那个对象,猜想传入方法的参数不是name本身而是name的一个副本(也就是地址的一个副本)。

在main方法中直接更改name

1      System.out.println("尝试改变前stu的name:"+stu.name);
2         stu.name=("null");
3         System.out.println("尝试改变后stu的name:"+stu.name);

运行结果:

  • 尝试改变前stu的name:Jack
  • 尝试改变后stu的name:null

name发生了改变,证明是传入时出了问题,传的是地址的一个副本。

代码一顿操作后来个总结是再好不过了

  以上所有操作只说明一个结果:Java中传参是值传递,传入方法的只是一个copy。传基本类型的变量时传的是数据的一个copy,传引用类型的变量时传的是地址的一个copy。此时注意引用类型的变量承载的只是对象的地址而不是对象本身哦!

  另(可视而不见):注意静态变量的与众不同,改变一个对象的静态变量就相当于改变所有哦。这时候如果使用对象来调用静态变量很容易造成混淆,毕竟它是属于类的。

Java的传值机制

标签:传递   string   temp   结果   ring   public   注意   一段   nbsp   

原文地址:https://www.cnblogs.com/hbc314/p/12149804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!