xmind果果 2019-02-25 17:04 采纳率: 71.4%
浏览 385
已采纳

java:当参数Object A传递到方法B(Object A1)时,A1是否又分配了一块堆内存

先看代码

class MyObj {
    public int b = 99;
}
class Test{
public static void main(String[] args) {
        Test t = new Test();
        int a = 99;


        MyObj obj1 = new MyObj();
        t.test2(obj1);// 这里传递的参数obj就是引用传递
        System.out.println(obj1.b);
    }
            public void test2(MyObj obj) {
        obj = new MyObj();  //纠结在这一行
        obj.b = 100;
        System.out.println(obj.b);
    }
        }

1.我在搜索java值传递和引用传递时,发现了巨大的矛盾,一部分人说全部是值传递,另一部分人说分值传递和引用传递
,现在问题纠结在 运行搭配 test2方法的参数obj 是否是拷贝了对象obj1 ,又分配了一块内存地址都指向堆内存obj1对象。

2.我希望获得一个工具能够让我查看执行到test2的方法时的内存 ,我尝试jvisualvm并不能看到

  • 写回答

5条回答 默认 最新

  • 毕小宝 博客专家认证 2019-02-25 20:20
    关注

    首先,Java对象的方法调用时值传递不存在拷贝这种说法,它是传递了引用地址。所以test2方法的参数obj 只是使用了对象obj1句柄,指向内存中同一片内存区域。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作