java中的闭包

来源:互联网 发布:奥飞数据与奥飞娱乐 编辑:程序博客网 时间:2024/06/05 08:33

今天将一个变量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的值会改变


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


0 0
原创粉丝点击