狗洲L 2023-10-30 13:06 采纳率: 73.3%
浏览 28
已结题

刚学java 在外部声明了变量 为什么在方法内对变量修改不起作用

在Fight_game_engine 里先声明了name等几个变量,在updateUI里赋值,但是每次都赋值不了,希望大家帮忙看看,感谢感谢

img

img

img

img

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-31 19:04
    关注

    【以下回答由 GPT 生成】

    在Java中,如果你在方法内部尝试修改一个在方法外部声明的变量,那么实际上你操作的是方法内部创建的一个新的同名变量,而不是原始变量。这是因为Java采用了传值(pass-by-value)的方式传递参数,对于基本数据类型(如int、double等)和String类型,它们都是不可变的(immutable)。所以,当你在方法内部重新赋值时,实际上是修改了一个新的变量的值,对原始变量并没有产生影响。

    要解决这个问题,有几种方法可以尝试:

    1. 通过使用实例变量:将声明的变量从局部变量移到类的实例变量中,这样就可以在整个类的方法中使用。示例代码如下:
    public class Fight_game_engine {
        // 变量移到类的实例变量中
        String name;
    
        public void updateUI() {
            // 可以对实例变量直接进行赋值
            this.name = "新的值";
        }
    }
    
    1. 通过返回值:将方法的返回类型设置为需要修改的变量类型,并在方法内部返回新的值,在调用该方法时,将原始变量重新赋值。示例代码如下:
    public class Fight_game_engine {
        // 声明一个返回String类型的方法
        public String updateUI() {
            // 返回新的值
            return "新的值";
        }
    
        public static void main(String[] args) {
            Fight_game_engine game = new Fight_game_engine();
            // 赋值给原始变量
            game.name = game.updateUI();
        }
    }
    
    1. 通过使用可变对象:将变量声明为一个可变对象,如使用StringBuilder或StringBuffer来代替String,然后在方法内部修改对象的属性。示例代码如下:
    public class Fight_game_engine {
        // 将变量声明为StringBuilder类型
        StringBuilder name = new StringBuilder();
    
        public void updateUI() {
            // 修改StringBuilder对象的属性
            this.name.append("新的值");
        }
    }
    

    总结起来,如果你想在方法内部修改一个在方法外部声明的变量,可以将变量定义为类的实例变量,通过返回值的方式返回新的值并赋值给原始变量,或者使用可变对象来修改属性。这样才能保证方法内部的修改对原始变量产生影响。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 修改了问题 10月30日
  • 修改了问题 10月30日
  • 展开全部

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度