java中的闭包

本文通过一个小程序实例详细阐述了闭包的概念及其在内存管理中的应用,包括对象地址变化、属性修改对主程序的影响等。通过具体代码分析,揭示了闭包在Java中的实现方式和作用机制。

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

今天将一个变量A传到一个方法B(A)中,然后再到B外部调用A,发现A的值不对,后来发现这是一个闭包的概念

写了一个小程序测试了一下

	private static void numberTest(Person j) {

		System.out.println("numberTest1:" + j.age);
		// j = 3;
		System.out.println(j.toString());

		j.age = 13;
		// j = new Person("gxw2", 12);

		System.out.println(j.toString());

		System.out.println("numberTest2:" + j.age);
		// return i;

	}

	public static void main(String[] args) {
		Integer i = 2;
		String t = "gxw";

		Person person1 = new Person("gxw", 11);
		System.out.println("main1:" + person1.toString());
		numberTest(person1);
		System.out.println("main2:" + person1.toString());
		System.out.println("main:" + person1.age);
	}

}

class Person {
	String name;
	int age;

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

}

当numberTest方法中直接new一个对象,new出的j在会在堆中被分一个新地址,但是新地址不会覆盖原始地址,所以当在mian方法中输出person1的地址是不变的,而在numberTest中j的地址会改变。

当在numberTest方法中改变Person的属性时,由于在堆中的地址没变,变得只是属性,所以在main中person1的地址同样不变,并且在numberTest中j的地址也不变,但在mian和numberTest中输出age时,age的值会改变


果然在大学学的东西都还给老师了,真实瀑布汗,还得巩固基础知识啊


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值