当前位置: 首页 > news >正文

【成员变量和局部变量类错误】

项目场景:在Java中,将成员数组作为方法参数传递时,如果在方法内部对数组进行了“扩容(创建新数组)”并重新赋值,不能通过修改形参来更新成员变量。正确做法是直接操作成员变量本身.


问题描述:在定义一个方法并执行后,方法内的参数没有传到main中

例如:这段功能为扩增的代码中,在调用时,并没有实现扩增功能:

**public static void getNewArrays(String[] names,String[] states,String[] dts,String name){ //1.创建新数组 String[] newNames=new String[names.length*2]; String[] newstates=new String[states.length*2]; String[] newdts=new String[dts.length*2]; //2.把老数组元素复制给新数组: int i = 0; for ( ;i < names.length; i++) { newNames[i]=names[i]; newstates[i]=states[i]; newdts[i]=dts[i]; } //3.添加DVd到新数组里去 newNames[i]=name; newstates[i]="可借"; newdts[i]=""; System.out.println("新增<<" + name + ">>成功!"); //4. names=newNames; states=newstates; dts=newdts; } ---**

原因分析:Java 只有值传递:当把数组(对象)作为参数传递时,传递的是“数组内存地址的副本”。

修改元素 vs 修改指向:
如果在方法内通过 names[i] = xxx 修改数组里的元素,外部成员变量是会跟着变的(因为大家指向同一块内存)。
但如果在方法内执行 names = newNames;,这只是让局部变量副本指向了新的内存地址,而外部的成员变量依然死死指着原来的旧地址。方法结束后,局部变量销毁,外部毫无影响。


解决方案:方法参数只传入需要新增的 name。在方法内部直接对类的成员变量 names, states, dts 进行扩容和重新赋值。

例如:直接使用成员变量,不用新设形参,方法体操作完,成员变量直接被成功替换。

public static void getNewArrays(String name){ //1.创建新数组 String[] newNames=new String[names.length*2]; String[] newstates=new String[states.length*2]; String[] newdts=new String[dts.length*2]; //2.把老数组元素复制给新数组: int i = 0; for ( ;i < names.length; i++) { newNames[i]=names[i]; newstates[i]=states[i]; newdts[i]=dts[i]; } //3.添加DVd到新数组里去 newNames[i]=name; newstates[i]="可借"; newdts[i]=""; System.out.println("新增<<" + name + ">>成功!"); //4. names=newNames; states=newstates; dts=newdts; }
http://www.jsqmd.com/news/1197684/

相关文章:

  • VS Code Remote 微信小程序远程开发实战指南
  • 从微分方程到传递函数:首1法与尾1法的形式转换与工程意义
  • C/C++多级指针详解:从内存模型到动态数组与函数参数传递
  • 常见MQ(消息队列),以及它们的区别
  • 开关电源MOSFET选型与热设计实战指南
  • 深研生物怎么样?三个维度拆解CGT上游技术实力
  • ABAP 没有 TemplateRef,但四类 SAP 技术可以承担相近职责
  • 【《CentOS7/7.9 ls 命令超详细实操教程|零基础运维必备》】
  • OpenCLI:让已登录的Chrome浏览器变成可编程RPC服务端
  • 中国汽车月度销量预测与市场趋势分析
  • C++多线程编程实战指南:从基础同步到高级并发工具
  • 基于Multisim的RC有源滤波器设计与仿真实践指南
  • 【第八章 软件质量属性域架构评估】
  • GitHub Copilot学生版GPT-5.4权限调整深度解析
  • 芝柏中国官方售后服务中心|服务电话及全部维修地址权威信息声明(2026年7月更新) - 亨得利钟表维修中心
  • 【Grasshopper进阶】GH_ParamAccess:数据树、列表与项,电池执行的三种模式
  • 从固定阈值到自适应学习:DB算法如何革新文本检测的二值化过程
  • 新手也能上手!盘点2026年最受欢迎的的AI智能降重工具
  • C++与Boost库实战:从零构建本地搜索引擎核心模块
  • 5个提升Python开发效率的PyCharm插件,亲测好用!
  • 【实战】Linux下VSCode一站式部署与高效配置指南
  • Claude Code本地部署总卡壳?macOS从安装到API对接完整教程,亲测可用
  • OpenClaw安装指南:智能体时代的基础运行时部署
  • FPGA入门:Verilog实现LED闪烁灯设计全解析
  • 大模型网关设计:面向高并发场景的LLM智能路由与流式调度系统
  • 宇舶中国官方售后服务中心|服务电话与网点地址权威信息声明(2026年7月更新) - 亨得利官方服务中心
  • DLAI 医疗人工智能笔记(一)
  • 告别繁琐Mock配置:阿里TestableMock如何用注解重构单元测试
  • LLM推理优化-FreqDepthKV_2026_精读笔记
  • MATLAB趣味小程序:从创意到交互式App的实践指南