V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uselessVisitor
V2EX  ›  Java

请教一个 Java 中传值和传址的问题

  •  
  •   uselessVisitor · 2020-11-23 11:25:23 +08:00 · 2228 次点击
    这是一个创建于 1463 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问一下,List不是每次新建的地址都是不一样的吗?为什么这样传递会提示这个提示呢?

    然后不加返回值竟然可以修改 List 中的对象。。

    convertList(items,record)这样直接就可以改变 items 的内容

    请问下为什么呢?

    第 1 条附言  ·  2020-11-23 12:05:10 +08:00

    后续测试了一下。。之前测试的有误。。传进来的List的hashcode是一样的。。说明传的地址。。

    cubecube
        1
    cubecube  
       2020-11-23 12:13:57 +08:00
    几乎所有参数都是值传递,除了 cpp 里面的 ref
    340244120w
        2
    340244120w  
       2020-11-23 12:20:18 +08:00 via iPhone
    Java 都是值传递,传递对象内存地址的拷贝
    wysnylc
        3
    wysnylc  
       2020-11-23 12:23:11 +08:00
    Java 只有值传递-https://blog.csdn.net/javazejian/article/details/51192130
    能改变的原因是地址当成值传过去
    uselessVisitor
        4
    uselessVisitor  
    OP
       2020-11-23 12:51:24 +08:00
    @cubecube
    @340244120w
    @wysnylc
    感谢。。大概是懂了。。
    Jooooooooo
        5
    Jooooooooo  
       2020-11-23 13:07:25 +08:00
    理解成把对象的地址传进去就好了
    FrankHB
        6
    FrankHB  
       2020-11-23 13:15:52 +08:00
    讲了多少遍了跟所谓传值相对的是传名……
    所谓传引用说白了是传值的一种。
    Java 都是传值但没直接把引用当对象的机制,算不上传引用,撑死了算传共享对象(call by sharing) 。能传引用 swap 还用什么 box 。
    还有哪来的什么地址,是被什么垃圾来源坑了? hashcode 一样说明地址,什么逻辑?
    xuanbg
        7
    xuanbg  
       2020-11-23 14:21:28 +08:00
    变量的值和对象的值是两码事。
    譬如:String a = "a";
    变量 a 的值是指向字符串对象的地址,对象的值才是“a”,而不是变量 a 的值是"a"。
    uselessVisitor
        8
    uselessVisitor  
    OP
       2020-11-23 18:26:15 +08:00 via Android
    @FrankHB cxxn,哭了😭
    EminemW
        9
    EminemW  
       2020-11-23 19:57:44 +08:00
    Java 都是传值,对象类型传的值是该对象的地址,基本类型传的值是该类型值的拷贝
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2672 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.