是否可以修改Java中函数参数中发送的属性值



我正在开发一个计算器,并搜索如何优化代码
问题是,如果我在计算第一个数字或第二个数字,我会有很多代码重复
所以我正在搜索是否可以修改函数参数中发送的属性的值?(我想不是因为我找不到答案(。

也许我表达得很糟糕,所以下面有一个代码来解释我所说的:

public class MyClass
{
private static int number1 = 1;
private static int number2 = 2;
public MyClass()
{
changeValueOf(number1, 3);
}
private static void changeValueOf(int number, int value)
{
//Change here the value of the correct field
}
}

首先,您可以修改方法内部的静态变量:

private static void changeValueOf(int value)
{
number1 = value;
}

但我想这不是你想要的:(

在Java(以及大多数其他语言(中,通过值传递的原始数据类型(intshortlong等(,例如,值的副本传递给方法(函数(。以及通过引用传递的引用类型(对象,例如使用new运算符创建的对象(。因此,当您修改引用类型(对象(的值时,您可以看到外部作用域中的更改(例如,在方法调用程序中(。

因此,答案是否定的——您不能更改int的值,以便外部作用域可以看到更新后的值。

然而,你可以用一些对象包装你的int值,它会改变里面的值:

public class Example {
public static void main(String[] args) {
Example app = new Example();
// Could be static as well
Holder val1 = new Holder(1);
Holder val2 = new Holder(2);
app.changeValue(val1, 7);
System.out.println(val1.value); // 7
}
public void changeValue(Holder holder, int newValue) {
holder.value = newValue;
}
static class Holder {
int value;
Holder(int value) {
this.value = value;
}
}
}

此外,你可以创建一个有2个值的数组,并在方法中更新它们,但这不是一个很好的方法IMO

最后,您可以返回更新后的值并将其分配给您的变量:

public class Example {
private static int number1 = 2;
private static int number2 = 3;
public static void main(String[] args) {
Example app = new Example();

number1 = app.mul(number1, 7);
number2 = app.mul(number2, 7);
System.out.println(number1); // 14
System.out.println(number2); // 21
}
public int mul(int a, int b) {
return a * b;
}
}

一种可能性是使用数组来存储变量,而不是使用附加数字的单独变量。例如,您可以编写number[1]而不是number1。您可以传递数组索引编号来指示您所指的变量。

public class MyClass
{
private static int[] variables = {1, 2};
public MyClass()
{
// change value of first variable
changeValueOf(0, 3);
// now variable[0] = 3
}
private static void changeValueOf(int number, int value)
{
variables[number] = value;
}
}

最新更新