如何从Java中的void函数中获取值?

时间:2014-06-06 10:46:31

标签: java

我的问题就像这段代码:

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; 
...
}

5 个答案:

答案 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函数,该值将在函数内部更新,但在外部它将是相同的。
所有都是技巧,有时在采访中被问到。希望这会对你有所帮助。