了解变量如何指向 Java 中的值
Understanding how variable point to value in Java
我有以下代码。变量 c
和 d
是 class 变量,最初它们指向值 0,但是当我执行 c=a* a;
和 d =b* b*b
时,它们将值打印为 25 和64 这是正确的。所以我现在认为 c
和 d
现在指向值 25 和 64 并且它们是 class 变量,所以如果我这样做 j=c+d;
它应该给我89 作为 j
值,但它给了我 0... 为什么?我知道如果我将 static
与 c
和 d
变量一起使用,它会给我 89 个值...但是为什么我应该将 static
用作 c
和 d
是全局变量,值现在更新为 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()
而是使用 cub
和 squ
分别。
改为
BaiscSum su = new BaiscSum();
su.square();
su.cube();
su.sum();
它会给你预期的输出。
由于您使用的所有变量都是实例化的,因此每个对象在各自的内存空间中都有自己的一组变量,如果您更改任何一个对象变量,它不会影响其他对象的值。
这可以清除更多
作为解释,每个对象都分配了一个单独的内存,因此对一个对象变量的更改不会影响对其他对象变量的更改,除非它们是静态的。所以在第三个对象中 c
和 d
没有为 su
对象初始化所以 jvm 使用默认值 if int 即 0
给你一个零的总和。
您正在使用 class 的三个独立实例。这意味着 squ
、cub
和 su
每个都有自己的 class 版本。相反,使用同一个实例,这样所有的更改都会发生在同一个实例上。
public static void main(String[] args) {
BaiscSum sum= new BaiscSum();
sum.square();
sum.cube();
sum.sum();
}
我有以下代码。变量 c
和 d
是 class 变量,最初它们指向值 0,但是当我执行 c=a* a;
和 d =b* b*b
时,它们将值打印为 25 和64 这是正确的。所以我现在认为 c
和 d
现在指向值 25 和 64 并且它们是 class 变量,所以如果我这样做 j=c+d;
它应该给我89 作为 j
值,但它给了我 0... 为什么?我知道如果我将 static
与 c
和 d
变量一起使用,它会给我 89 个值...但是为什么我应该将 static
用作 c
和 d
是全局变量,值现在更新为 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()
而是使用 cub
和 squ
分别。
改为
BaiscSum su = new BaiscSum();
su.square();
su.cube();
su.sum();
它会给你预期的输出。
由于您使用的所有变量都是实例化的,因此每个对象在各自的内存空间中都有自己的一组变量,如果您更改任何一个对象变量,它不会影响其他对象的值。
这可以清除更多
作为解释,每个对象都分配了一个单独的内存,因此对一个对象变量的更改不会影响对其他对象变量的更改,除非它们是静态的。所以在第三个对象中 c
和 d
没有为 su
对象初始化所以 jvm 使用默认值 if int 即 0
给你一个零的总和。
您正在使用 class 的三个独立实例。这意味着 squ
、cub
和 su
每个都有自己的 class 版本。相反,使用同一个实例,这样所有的更改都会发生在同一个实例上。
public static void main(String[] args) {
BaiscSum sum= new BaiscSum();
sum.square();
sum.cube();
sum.sum();
}