令人困惑的Java参数操作

时间:2013-10-07 06:28:20

标签: java

当我使用a = x,b = y时,结果为15.但是当我使用x = a,y = b时,结果为0.你能解释一下原因吗?

public class Test {
        int a , b;

    Test(int x, int y) {    

         a=x;

         b=y;

    }

    int sr() {

        return a*b;
    }

    public static void main (String args[]){

        Test t=new Test(5,3);

        System.out.println(t.sr());
    }

}

6 个答案:

答案 0 :(得分:4)

a=x;

b=y;

将设置实例属性a& b值包含传递的值xy。因此,当您使用:

创建实例时
Test t=new Test(5,3);

a和b的值为5&分别为3。因此调用方法t.sr将返回

a*b = 5*3 = 15;

另一方面,如果你使用:

x = a;

y = b;

局部变量x和y将设置为默认值a和b,即0.还有a和b将defualt值保持为0,因为没有设置其他值。所以,当你做

 Test t=new Test(5,3);

作为& b的值为0,因此调用方法t.sr将返回

a*b = 0*0 = 0;

答案 1 :(得分:3)

int字段的默认值为0.因此,如果不为它们指定值,则它们为0。 请参阅:http://www.javapractices.com/topic/TopicAction.do?Id=14

答案 2 :(得分:1)

在构造函数中,您传递 x和y 的值,并将其存储在 a和b 中。现在,当您调用方法时,a 已获得值,因此返回a*b的值。 a和b也是类变量,所以它有默认值,即a = 0,b = 0; 现在在第二种情况下 x = a,y = b 。你在x和y 中存储 a和b的值。由于你没有在a和b中存储任何值,你再次调用sr方法,所以它只返回a和b的值即0*0所以你得到0作为输出

答案 3 :(得分:1)

使用时 x = a,y = b

您没有为sr()中使用的a和b赋值。

由于存在实例变量,因此将为其分配默认值0,因此结果为0

答案 4 :(得分:1)

使用时 x = a,y = b x和y是局部变量。一旦该块(构造函数)被执行,它们就会被丢弃。 但 a,b是实例变量。它们一直存在,直到你从类中获得实例。 int实例的默认值为0; 因为你没有改变这些值,所以总是得到0

答案 5 :(得分:0)

在构造函数的范围内,x and y是局部变量。

如果你这样做:

x = a;
y = b;

成员变量a and b永远不会在构造函数中初始化。因此,当a * b的默认值为0时,执行a and b将产生0。

实际上,执行x = ay = b毫无意义。