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 是按值传递的(基元和对象引用作为副本传递),因此您在方法内所做的更改将不会从调用它的位置反映出来
Java 支持按值传递。因此,当它将
a,b,c,d
传递给 changeValue()
方法时,它将这些变量的值复制到 x , y 。因此,如果更改 x
和 y
的值,不会影响 a,b,c,d
您可以使用面向对象编程:
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());
}
}
这样您就不必成对更改它们,如果您想单独更改它们,这是一个更灵活的解决方案。
使用两个参数你无法知道你改变了什么变量
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);
}
}
简而言之,你无法更改,因为 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。