如何更改方法参数? [重复]

问题描述 投票:0回答:5
package test;

public class Main {
    static double a,b,c,d;
    
    public static void changeValue(double x, double y)
    {
        x=1;
        y=2;
    }
    
    public static void main (String args[])
    {
        changeValue(a,b);
        changeValue(c,d);
        System.out.println("a="+a+"\nb="+b+"\nc="+c+"\nd="+d);
    }
    
}

a,b,c,d
值不会改变。

如何更改方法参数?

java methods parameters
5个回答
2
投票

由于 Java 是按值传递的(基元和对象引用作为副本传递),因此您在方法内所做的更改将不会从调用它的位置反映出来


0
投票

Java 支持按值传递。因此,当它将

a,b,c,d
传递给
changeValue()
方法时,它将这些变量的值复制到 x , y 。因此,如果更改
x
y
的值,不会影响
a,b,c,d


0
投票

您可以使用面向对象编程:

package test;

public class Main {
    private double a,b,c,d;

    public Main() {
        a = 0.0;
        b = 0.0;
        c = 0.0;
        d = 0.0;
    }
    public void setA(double x) {
        a=x;
    }
    public void setB(double x) {
        b=x;
    }

    public void setC(double x) {
        c=x;
    }

    public void setD(double x) {
        d=x;
    }

    public double getA() {
        return a;
    }
    public double getB() {
        return b;
    }
    public double getC() {
        return c;
    }
    public double getD() {
        return d;
    }


    public static void main (String args[]) {
        Main myMain = new Main();
        myMain.setA(1);
        myMain.setB(2);
        myMain.setC(1);
        myMain.setD(2);

        System.out.println("a="+myMain.getA()+"\nb="+myMain.getB()+"\nc="+myMain.getC()+"\nd="+myMain.getD());
    }
}

这样您就不必成对更改它们,如果您想单独更改它们,这是一个更灵活的解决方案。


0
投票

使用两个参数你无法知道你改变了什么变量

changeValue(a,b);
changeValue(c,d);

即使将值传递给方法也不会起作用。请注意,您是按值传递参数,而不是按引用传递参数。但如果你把签名改成

changeValue(double x, double y, double u, double w)

那么你就知道如何初始化类变量了

public class Main {
    static double a,b,c,d;

    public static void changeValue(double x, double y, double u, double w)
    {
        a = x;
        b = y;
        c = u;
        d = w; 
    } 

    public static void main (String args[])
    {
        changeValue(1,2,3,4);
        System.out.println("a="+a+"\nb="+b+"\nc="+c+"\nd="+d);
    }

}

0
投票

简而言之,你无法更改,因为 Java 始终是按值传递的。 但是您可以使用包装器。 这会起作用:

class DoubleHolder { public double value = 0; }

class Ideone
{


   static DoubleHolder a = new DoubleHolder();
   static DoubleHolder b = new DoubleHolder();

    public static void changeValue(DoubleHolder x, DoubleHolder y)
    {
        x.value=1;
        y.value=2;
    }

    public static void main (String args[])
    {

        changeValue(a,b);

        System.out.println("a="+a.value+"\nb="+b.value+"\n");
    }


}

当然,您可以增强它以使用 get/set。

© www.soinside.com 2019 - 2024. All rights reserved.