java - main方法中的这个变量变化不影响上层类的原因是什么

标签 java

如果这是一个新手问题,请原谅,但我需要你的帮助来理解为什么在 main 方法中调用 b.createNumB(1) 会影响 ClassB 中 numB 的变化。

class ClassB {
        int numB = 0;
        public int getNumB(){
            return numB;
        }
        void createNumB(int num){
            numB = num;
        }   
    }

    public class ClassA {
        ClassB b = new ClassB();

        // Returns numB from ClassA
            public int returnB(){
            return b.getNumB();
        }

         public static void main(String[]args){   
             ClassA a = new ClassA();
             ClassB b = new ClassB();

       //My espectation is that b.createNumB(1) should update numB in ClassA
             b.createNumB(1);
             System.out.println(a.returnB());
         }   
        }

代码运行时打印0而不是1;请我解释一下是什么 发生在这段代码的后面。谢谢。

最佳答案

这不起作用,因为您正在创建 ClassB 的单独实例。如果您希望它起作用,您必须将实例传递给ClassA。像这样:

public class ClassA {
    ClassB b;
    public ClassA(ClassB b){
       this.b = b;
    }
//...

然后你可以执行ClassA a = new ClassA(b)

更改实例的一个值不会影响所有实例。如果您使用static,您就可以做到这一点。我认为你可以研究static来自己学习。

关于java - main方法中的这个变量变化不影响上层类的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259490/

相关文章:

java - 我如何将我的 Retrofit 数据从 MainActivity 发送到我的 Fragment?

java - equalsIgnoreCase() 与 toUpperCase().equals 和 toLowerCase().equals 的效率

java - java版本不匹配

java - 是否可以在使用 Java 9 的 Eclipse IDE 中使用没有类和主要方法的 sysout?

java - 以编程方式创建 Spring Framework 任务?

java - 将带有 "+"的字符串从 jsp 传递到 servlet

java - Tomcat Web 应用程序调试数据库连接

java - 旋转 Java Graphics2D 矩形?

Java Apache POI 空白单元格

java - 排序依据字段,最长的字符串排在前面