请问一下,List
不是每次新建的地址都是不一样的吗?为什么这样传递会提示这个提示呢?
然后不加返回值竟然可以修改 List 中的对象。。
如
convertList(items,record)
这样直接就可以改变 items 的内容
请问下为什么呢?
后续测试了一下。。之前测试的有误。。传进来的List的hashcode是一样的。。说明传的地址。。
1
cubecube 2020-11-23 12:13:57 +08:00
几乎所有参数都是值传递,除了 cpp 里面的 ref
|
2
340244120w 2020-11-23 12:20:18 +08:00 via iPhone
Java 都是值传递,传递对象内存地址的拷贝
|
3
wysnylc 2020-11-23 12:23:11 +08:00
Java 只有值传递-https://blog.csdn.net/javazejian/article/details/51192130
能改变的原因是地址当成值传过去 |
4
uselessVisitor OP |
5
Jooooooooo 2020-11-23 13:07:25 +08:00
理解成把对象的地址传进去就好了
|
6
FrankHB 2020-11-23 13:15:52 +08:00
讲了多少遍了跟所谓传值相对的是传名……
所谓传引用说白了是传值的一种。 Java 都是传值但没直接把引用当对象的机制,算不上传引用,撑死了算传共享对象(call by sharing) 。能传引用 swap 还用什么 box 。 还有哪来的什么地址,是被什么垃圾来源坑了? hashcode 一样说明地址,什么逻辑? |
7
xuanbg 2020-11-23 14:21:28 +08:00
变量的值和对象的值是两码事。
譬如:String a = "a"; 变量 a 的值是指向字符串对象的地址,对象的值才是“a”,而不是变量 a 的值是"a"。 |
8
uselessVisitor OP @FrankHB cxxn,哭了😭
|
9
EminemW 2020-11-23 19:57:44 +08:00
Java 都是传值,对象类型传的值是该对象的地址,基本类型传的值是该类型值的拷贝
|