Java的值传递机制

java值传递机制

java中方法的形参的传递机制:值传递机制

  1. 形参和实参的定义:

    • 形参:方法定义时,声明在小括号里的参数
    • 实参:方法调用时,实际传递给形参的数据
  2. 值传递机制:

    • 如果参数是基本数据类型,此时实参赋值给形参的是实参真实存储的数据值

           public class Test {
           	public static void main(String[] args) {
           		int i = 1;
           		Test test = new Test();
           		test.add(i);
           		System.out.println(i);// 1
           	}
           
           	public void add(int i) {
           		i = i + 1;
           		System.out.println(i);// 2
           	}
           }
           //输出结果依次是:2,1
      

      ​ 这是因为java的值传递机制,add()形参是基本数据类型,实参传递给实参的是数据值,不管add()方法里怎么操作这个值,都不会影响到 main()方法中的i,所以在main()中,调用add()后输出i的值仍然是1;

    • 如果参数是引用数据类型,此时实参赋值给形参的是实参存储数据的地址值

      public class Test {
      	public static void main(String[] args) {
      		Person person = new Person("Tom", 23);
      		System.out.println(person);
              //Person [name=Tom, age=23]
      
      		Test t = new Test();
      		t.change(person);
      		System.out.println(person);
              //Person [name=Jerry, age=12]
      	}
      
      	public void change(Person p) {
      		p.age = 12;
      		p.name = "Jerry";
      	}
      }
      
      class Person {
      	String name;
      	int age;
      
      	public Person() {
      
      	}
      
      	public Person(String name, int age) {
      		this.name = name;
      		this.age = age;
      	}
      	//重写toString()
      	@Override
      	public String toString() {
      		return "Person [name=" + name + ", age=" + age + "]";
      	}
      
      }
      

      ​ 在没调用change()之前输出person:name=Tom,age=23。因为change()的形参是引用数据类型,调用此方法时实参实际传递的是person的地址值,此时person和p指向堆空间里同一个对象,所以当change()里的p改变了这个对象的name(Jerry)和age(12)时,再次输出person,name就变成了Jerry,age就变成了12。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值