weixin_51310196 2022-02-11 17:34 采纳率: 50%
浏览 322

将JsonObject作为参数传入方法,在方法中修改json,原json为什么会发生改变呢

将JsonObject作为参数传入方法,在方法中修改json,原json为什么会发生改变呢
    public static void main(String[] args) {

    JSONObject users = new JSONObject();

    users.put("1", "张三");
    users.put("2", "李四");

    JSONObject usersCopy = users;

    changeUsers(usersCopy);//将users json的备份传入改变方法

    System.out.println(users);//打印原json
}

private static void changeUsers(JSONObject usersCopy) {
    usersCopy.put("1", "王五");
}
打印结果是{"1":"王五","2":"李四"},张三变成了王五
感觉就像是赋值userCopy=users是赋值了对象的引用,传入参数也是传入引用。
这个是在工作中遇到的问题,虽然工作半年了,但是基础还是重要啊,我的代码流程是一个json对象,在经过一个方法发生改变,但是在下一个流程中还是需要用到原json,求大佬解答这段代码大概的底层流程,还有我这个逻辑需要怎么实现
  • 写回答

1条回答 默认 最新

  • 七号公园的忧伤 Java领域新星创作者 2022-02-11 18:06
    关注

    1.这就是引用传递和值传递的区别。详细的可以自己百度下。
    2。 new出来的是一个对象,等号左边的只是指向这个对象,你的usersCopy和users都是指向同一个对象而已。传到方法中,也只是传递的引用(对象的地址)。并没有把对象复制一份出来,所以修改的还是原对象。
    3.至始至终只有一个对象。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 2月11日
  • 创建了问题 2月11日

悬赏问题

  • ¥60 微信小程序如何上传QQ聊天文件
  • ¥300 开发的系统遭到无良商家的破解,请问如何防止再次发生,并追回损失
  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏