为什么该方法打印10而不是12

时间:2014-06-11 14:30:36

标签: java

当我有滚动代码时怎么可能。 当我希望它打印12时,有一种打印10的方法:

public class Opgave1d {

    PrintStream out;
    int p = 5;
    int q = 10;

    public Opgave1d() {
        out = new PrintStream(System.out);
    }

    void methode1(int p) {
        this.p = p + 2;
        q = 4 * p;
        out.printf("%d\n%d\n", p, q);
    }

    void start(){
        methode1(q);
    }
}

它怎么可能打印10和40,40我得到它,但为什么它不打印: 12 40 ???? 我感谢任何帮助!

8 个答案:

答案 0 :(得分:5)

你正在隐藏你的变量。

this.p

引用实例的p变量,而p引用本地参数变量。

答案 1 :(得分:4)

因为它打印p(局部变量)而不是this.p(成员变量)。

答案 2 :(得分:2)

您实际上是使用out.printf中的正式参数来隐藏属性。尝试打印this.p

我建议您在属性和形式参数之间使用不同的名称约定(属性上的前缀可能有帮助)。

答案 3 :(得分:1)

您没有更改p的值;你改变了this.p的价值。 这些变量不一样!

pmethode1中的局部变量,而this.p是实例变量(类的成员)。如果您想引用this.p,则必须明确指出,就像您在分配this.p = p+2时上面两行一样。

答案 4 :(得分:1)

因为它打印了局部变量p

out.printf("%d\n%d\n", p, q);

不是会员

out.printf("%d\n%d\n", this.p, q);

答案 5 :(得分:0)

您打印的参数q是“p”的值,并且不会更改。如果你打印过self.p而不是p,它会给你12个。

答案 6 :(得分:0)

   void start(){
        methode1(12);
    }

然后

 void methode1(int 10) {
        this.p = 10 + 2;
        q = 4 * 10;
        out.printf("%d\n%d\n", 10, 40);
    }

儿子要打印1240。您应该像这样引用您班级中的字段p

 void methode1(int 10) {
        this.p = p + 2;
        q = 4 * p;
        out.printf("%d\n%d\n", this.p, q);
    }

当您使用关键字this时,您会引用实例成员。

或避免使用字段和参数冲突的名称。

答案 7 :(得分:0)

你必须打印this.p才能看到所需的输出。这里的方法变量在本地范围内,所以你的p值为10