Java中对象的引用传递

本文详细探讨了Java中方法传参机制,特别是当参数为对象时的行为特点。指出在这种情况下,传参实际上是传递对象的引用,因此在方法内部对对象所做的任何修改都会反映到原始对象上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java中的对象赋值、函数传参、集合元素添加等都是引用传递,即目标变量还是指向原先的对象,目标变量修改对象的成员变量时,即是修改原先的对象,验证代码如下:

	@Data
	@NoArgsConstructor
	@AllArgsConstructor
	public static class Person{
	    private int id;
	    private String name;
	    private int age;
	}
	
	public static void ageAdd(Person person) {
	
	    person.setAge(person.getAge() + 1);
	}
	
	public static void main(String[] args) {
	
	    Map<Integer, Person> map = new HashMap<>();
	    Person p = new Person(1, "鸣人", 8);
	    System.out.println(JSON.toJSONString(p));  // {"age":8,"id":1,"name":"鸣人"}
	
	    /// 赋值给另一变量
	    Person p2 = p;
	    p2.setAge(p2.getAge() + 1);
	    System.out.println(JSON.toJSONString(p));  // {"age":9,"id":1,"name":"鸣人"}
	
	    /// 赋值给函数入参
	    ageAdd(p);
	    System.out.println(JSON.toJSONString(p));  // {"age":10,"id":1,"name":"鸣人"}
	
	    /// 添加到集合中
	    map.put(p.getId(), p);
	    map.get(p.getId()).setAge(p.getAge() + 1);
	    System.out.println(JSON.toJSONString(map.get(p.getId()))); // {"age":11,"id":1,"name":"鸣人"}
	}

注意:当原始变量指向的对象被添加到集合中,原始变量又被赋予新的对象,此时集合中的对象不受影响,即不会被销毁也不会变成新的对象 (集合元素可以理解为指向对象的变量,即集合中存储的实际是指向对象的地址,这个地址还在使用就说明其指向的对象还在使用,不会被虚拟机回收) !!!

2、java方法的传参为对象时,是引用类型,在方法中修改该传参会改变原始对象的值:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值