不懂0和1 2024-04-29 18:19 采纳率: 41.2%
浏览 1
已结题

c#中关于方法中值传递的问题

在一个方法A中定义一个变量p,然后在方法A中调用另一个类中的一个方法B,方法B的输入变量是p,方法B会改变p的值。但为什么,执行完方法B后回到方法A中,p的值仍然没有发生改变。

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-29 18:20
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这是因为Java中方法调用时,传递的是值传递(传递的是变量的副本),而不是引用传递(传递的是变量的地址)。 具体来说,当在方法A中定义变量p并调用方法B时,实际上会将变量p的值复制一份作为参数传递到方法B中,方法B对参数进行修改后,不影响方法A中变量p的值。因为方法B修改的是参数的副本,而不是原始变量p所在的内存地址。 以下是一个简单的案例,说明上述问题:
    public class Main {
        public static void main(String[] args) {
            int p = 10;
            changeValue(p);
            System.out.println(p);  // 输出10,而不是20
        }
        
        public static void changeValue(int num) {
            num = 20;
        }
    }
    

    在上面的代码中,我们定义了一个变量p并为其赋值10,然后调用方法changeValue并将p作为参数传递。在方法changeValue中,我们将参数num值改为20,然而当回到main方法时,输出p的值仍然是10。这是因为changeValue方法调用时只是将p的值复制一份传递给num,而不是直接传递p所在的内存地址,在方法中修改的是num的值,而不是p的值。因此,在changeValue方法执行完后,p的值仍然是10。

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

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月29日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题