了解变量如何指向 Java 中的值

Understanding how variable point to value in Java

我有以下代码。变量 cd 是 class 变量,最初它们指向值 0,但是当我执行 c=a* a;d =b* b*b 时,它们将值打印为 25 和64 这是正确的。所以我现在认为 cd 现在指向值 25 和 64 并且它们是 class 变量,所以如果我这样做 j=c+d; 它应该给我89 作为 j 值,但它给了我 0... 为什么?我知道如果我将 staticcd 变量一起使用,它会给我 89 个值...但是为什么我应该将 static 用作 cd 是全局变量,值现在更新为 25 和 64。请告诉我。谢谢。

public class BaiscSum {

    int a=5;
    int b=4;
    int c;
    int d;
    int j;

    public void square() {
        c=a*a;
        System.out.println(c);   
    }

    public void cube() {
        d=b*b*b;
        System.out.println(d);
    }

    public void sum() {
        j=c+d;
        System.out.println(j);
    }

    public static void main(String[] args) {
        BaiscSum squ= new BaiscSum();
        squ.square();

        BaiscSum cub = new BaiscSum();
        cub.cube();

        BaiscSum su = new BaiscSum();
        su.sum();    
    }
}

If I do j=c+d; it should give me 89 as j value, but it is giving me 0. why?

因为您使用 su 对象引用 sum() 但您没有在 su 上调用 cube()square() 而是使用 cubsqu 分别。

改为

BaiscSum su = new BaiscSum();
su.square();
su.cube();
su.sum();

它会给你预期的输出。

由于您使用的所有变量都是实例化的,因此每个对象在各自的内存空间中都有自己的一组变量,如果您更改任何一个对象变量,它不会影响其他对象的值。

这可以清除更多

作为解释,每个对象都分配了一个单独的内存,因此对一个对象变量的更改不会影响对其他对象变量的更改,除非它们是静态的。所以在第三个对象中 cd 没有为 su 对象初始化所以 jvm 使用默认值 if int 即 0 给你一个零的总和。

您正在使用 class 的三个独立实例。这意味着 squcubsu 每个都有自己的 class 版本。相反,使用同一个实例,这样所有的更改都会发生在同一个实例上。

public static void main(String[] args) {
    BaiscSum sum= new BaiscSum();
    sum.square();
    sum.cube();
    sum.sum();
}