了解Java中变量指向值的方式

时间:2015-04-12 18:51:03

标签: java variables instance-variables

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

c

2 个答案:

答案 0 :(得分:6)

您正在使用班级的三个单独实例。这意味着squcubsu各自拥有自己的类版本。相反,使用相同的一个实例,以便所有更改都发生在同一个实例中。

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

它会给你预期的输出。

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

这可以清除更多

enter image description here

作为解释,每个对象都分配了一个单独的内存,因此更改一个对象的变量不会影响对其他对象变量的更改,除非它们是静态的。所以在第三个对象BaiscSum su = new BaiscSum(); su.square(); su.cube(); su.sum(); c没有为d对象初始化,所以jvm使用默认值if int ie su给你一个零的总和。