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

【成员变量和局部变量类错误】
项目场景在Java中将成员数组作为方法参数传递时如果在方法内部对数组进行了“扩容创建新数组”并重新赋值不能通过修改形参来更新成员变量。正确做法是直接操作成员变量本身.问题描述在定义一个方法并执行后方法内的参数没有传到main中例如这段功能为扩增的代码中在调用时并没有实现扩增功能**public static void getNewArrays(String[] namesString[] statesString[] dtsString name){ //1.创建新数组 String[] newNamesnew String[names.length*2]; String[] newstatesnew String[states.length*2]; String[] newdtsnew 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. namesnewNames; statesnewstates; dtsnewdts; } ---**原因分析Java 只有值传递当把数组对象作为参数传递时传递的是“数组内存地址的副本”。修改元素 vs 修改指向如果在方法内通过 names[i] xxx 修改数组里的元素外部成员变量是会跟着变的因为大家指向同一块内存。但如果在方法内执行 names newNames;这只是让局部变量副本指向了新的内存地址而外部的成员变量依然死死指着原来的旧地址。方法结束后局部变量销毁外部毫无影响。解决方案方法参数只传入需要新增的 name。在方法内部直接对类的成员变量 names, states, dts 进行扩容和重新赋值。例如直接使用成员变量不用新设形参方法体操作完成员变量直接被成功替换。public static void getNewArrays(String name){ //1.创建新数组 String[] newNamesnew String[names.length*2]; String[] newstatesnew String[states.length*2]; String[] newdtsnew 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. namesnewNames; statesnewstates; dtsnewdts; }