我有以下代码。变量c
和d
是类变量,最初它们指向值0,但是当我执行c=a* a;
和d =b* b*b
时,它们打印的值为25和64,这是正确的。所以我现在想的是c
和d
现在指向值25和64并且它们是类变量,所以如果我j=c+d;
它应该给我89 {{{}} 1}}价值,但它给了我0 ...为什么?我知道如果我将j
与static
和c
变量一起使用,它会给我89个值......但为什么我应该将d
用作static
和{ {1}}是全局变量,现在值已更新为25和64.请告诉我们。感谢。
c
答案 0 :(得分:6)
您正在使用班级的三个单独实例。这意味着squ
,cub
和su
各自拥有自己的类版本。相反,使用相同的一个实例,以便所有更改都发生在同一个实例中。
public static void main(String[] args) {
BaiscSum sum= new BaiscSum();
sum.square();
sum.cube();
sum.sum();
}
答案 1 :(得分:3)
如果我 j = c + d; 它应该给我 89 作为j值,但它给了我 的 0 即可。为什么呢?
因为您使用sum()
对象引用了su
,但您未在cube()
上调用square()
和su
,而是使用{{1}调用它分别和cub
。
更改为
squ
它会给你预期的输出。
由于您使用的所有变量都是实例,因此每个对象在其各自的内存空间上都有自己的变量集,如果您更改了任何一个对象变量,它将不会影响其他对象的值。
这可以清除更多
作为解释,每个对象都分配了一个单独的内存,因此更改一个对象的变量不会影响对其他对象变量的更改,除非它们是静态的。所以在第三个对象BaiscSum su = new BaiscSum();
su.square();
su.cube();
su.sum();
和c
没有为d
对象初始化,所以jvm使用默认值if int ie su
给你一个零的总和。