我的问题就像这段代码:
public static void main() {
int a = 5;
add(5);
// The value of a is still 5 not 6
}
static void add(int x) {
x++;
// x = 6
}
如何通过void
使用方法获取值,它类似于:
int add(int a) {
return a++;
}
更重要的是:
void getValue(int m1, int m2, int m3, . . .) {
//do something which change the value of m
//for example
m1 += 5;
m2 *= 100;
...
}
答案 0 :(得分:3)
您需要通过引用传递值才能更改它:
public class Main {
static void add(int[] x) {
x[0] += 1;
}
public static void main()
int[] a = { 5 };
add(a);
// a[0] == 6
}
}
为了适应您编辑过的问题,您只需接受数组中的多个项目:
void getNewValues(int[] ms) {
m[0] += 5;
m[1] *= 100;
....
}
您也可以选择使用MutableInt
:
void getNewValues(MutableInt m1, MutableInt m2, MutableInt m3, . . .) {
//do something which change the value of m
//for example
m1.setValue(m1.intValue() + 5);
m2.setValue(m2.intValue() * 100);
...
}
答案 1 :(得分:2)
默认情况下,参数中的原始类型不会引用它,以便在将它递增1时它不会改变。
另一方面,如果它是参数中的一个对象,那么它将有一个对它的引用,因此在访问和修改对象的引用时会发生变化。
答案 2 :(得分:0)
您必须改为使用AtomicInteger:
public static void main()
{
AtomicInteger n = new AtomicInteger(5);
add(n);
}
static void add(AtomicInteger n)
{
n.addAndGet(1);
}
答案 3 :(得分:0)
只能以这种方式修改对象引用。您可以使用像对象容器这样的基本类型。这是一个例子:
class Example {
private static final int INITIAL_VALUE = 5;
public static class IntegerContainer {
private int value;
public IntegerContainer(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public static void main(String[] args) {
IntegerContainer integerContainer = new IntegerContainer(INITIAL_VALUE);
incrementInVoidMethod(integerContainer);
System.out.println(integerContainer.getValue());
}
public static void incrementInVoidMethod(IntegerContainer integerContainer) {
int valueToIncrement = integerContainer.getValue();
valueToIncrement++;
integerContainer.setValue(valueToIncrement);
}
}
答案 4 :(得分:-1)
正如您已经说过的那样,使用返回值!
int add(int x){
return x++;
}
或者您可以使用下面的内容!请参阅以下代码:
public class test {
public static void main(String args[]) {
int x=10;
System.out.println("X is: " + x);
StringBuilder xStringBuilder = new StringBuilder(Integer.toString(x));
add(xStringBuilder);
x=Integer.parseInt(xStringBuilder.toString());
System.out.println("X is: " + x);
}
private static void add(StringBuilder x) {
int val = Integer.parseInt(x.toString());
val++;
x.delete(0, x.length());
x.append(Integer.toString(val));
}
}
这是一个非常糟糕的做法!好吧,我假设这是一个技巧问题!! :d
另外,你可以使用静态变量!!这有时会被使用......
public class test {
private static int x=10;
public static void main(String args[]) {
System.out.println("X is: " + x);
add();
System.out.println("X is: " + x);
}
private static void add() {
x = x+1;
System.out.println("X is: " + x);
}
}
请记住不要将x作为参数传递给add函数,该值将在函数内部更新,但在外部它将是相同的。
所有都是技巧,有时在采访中被问到。希望这会对你有所帮助。