老师 ,counter是引用传递的么

来源:2-6 使用泛型

厥~~~

2019-10-16

这里的counter不是引用类型(Integer)么,自增后,为啥最后打印出counter的值还是0呢。图片描述

写回答

1回答

liuyubobobo

2019-10-16

是。


但是,increase 函数中 counter = counter + 1 这句话里,本质是将 counter 的指向改变,而不是改变 counter 的内容。所以你测试引用传递的方式是错误的。


你的测试方式等价于:

void main(){
    Student student = new Student("厥~~~");
    change(student);
}

void change(Student a){
    a = new Student("liuyubobobo");
}

运行完 change,main函数中的 student 不会变的。因为 a 和 student 是两个引用。


你要测试 Student 是引用传递,要这样测:

void change(Student a){    
    a.name = "liuyubobobo";
}


同理,main 函数中的 counter 和increase 函数中 counter, 是两个引用。调用 increase 的时候,这两个 counter 指向同一个内存。但是在运行完 counter = counter + 1 以后,increase 函数里的 counter 指向了新的内存。


但是,由于 Java 中的 Integer 类是不可更改的,所以你无法用这种方式测出 Integer 是引用传递。


继续加油:)

0
1
厥~~~
非常感谢!终于彻底明白了,原来是测不出Integer引用传递的。
2019-10-16
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程