Java运行时如何修改变量名 如何实现对象名与字符串或整数拼接
Java动态变量名相关问题解答
核心限制说明
Java是静态编译型语言,变量名仅存在于源码开发、编译阶段,编译生成的字节码中不存在源码里的变量名,只会保留内存地址引用。因此无法在运行时修改已有的变量名,也无法通过字符串拼接动态生成新的变量名,你代码中Button btn0+i = new Button(...)的写法是语法错误,无法通过编译。
需求替代实现方案
你想要批量创建按钮、给每个按钮做唯一标识的需求,可以通过以下两种成熟方案实现,不需要依赖动态变量名:
- 方案1:用数组存储批量生成的对象
你已经定义了Button[] digitButtons数组,直接将创建的按钮存入数组对应下标即可,不需要单独声明btn0、btn1这类独立变量,后续需要调用对应按钮时直接通过digitButtons[下标]取值即可。 - 方案2:用控件ID做标识
你代码中已经调用了getId()方法读取控件标识,只需要在创建按钮时给每个按钮设置唯一ID即可满足识别需求。
以下是修正后的可运行代码:
Button[] digitButtons = new Button[10]; for(int i = 0; i < 10; i++) { final int buttonInd = i; digitButtons[i] = new Button(Integer.toString(i)); // 给按钮设置唯一ID,格式为btn+数字 digitButtons[i].setId("btn" + i); digitButtons[i].setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { System.out.println("Button pressed " + ((Button) e.getSource()).getText()); System.out.println("button clicked " + ((Control)e.getSource()).getId()); lastClickedIndex = buttonInd; } }); }
如果确实需要通过自定义字符串名称来灵活存取按钮对象,可以使用HashMap实现类似动态变量名的存取效果:
// 键为自定义的按钮名称,值为按钮对象 Map<String, Button> buttonMap = new HashMap<>(); for(int i = 0; i < 10; i++) { Button button = new Button(Integer.toString(i)); button.setId("btn" + i); buttonMap.put("btn" + i, button); } // 后续可以直接通过字符串名称获取对应按钮 Button btn5 = buttonMap.get("btn5");
内容的提问来源于stack exchange,提问作者Mirwais Faizi
相关产品推荐
相关产品推荐

