Java通过引用传递int

时间:2015-10-27 17:12:15

标签: java

这是我的代码

public class Scale {

    public static void main(String[] args) {

        int x = 4;
        int y = 3;
        int faktor = 2;

        skaliere(x,y,faktor);

        System.out.println(x + " " + y);
    }

    public static void skaliere(int x, int y, int faktor){

        // ?

    }
}

我想用faktor改变x和y的比例,而不是使用返回值。只是通过skaliere方法。

3 个答案:

答案 0 :(得分:4)

  

我想用faktor改变x和y的比例,而不是使用返回值。只是通过skaliere方法。

请注意,Java不是通过引用传递,它总是按值传递

没有任何黑客,只是你不能,因为他们是原始人。如果它们是可变对象,是的,您可以更改其状态。

该hack会使它们变为静态并在该方法中分配值。

答案 1 :(得分:-1)

您可以使用包装这两个值的对象来执行此操作。这是因为对象引用被传递给方法。如果传递一个不可变的原语,它们将永远不会在返回时更改,它只会更改方法中的副本。使用对象,您可以传递包含的值,它将是检索时main方法引用的值。

public static void main(String[] args) {

    // org.eclipse.swt.graphics.Point
    Point p = new Point(0, 0);
    p.x = 4;
    p.y = 3;
    int faktor = 2;
    skaliere(p,faktor);

    System.out.println(p.x + " " + p.y);
}

public static void skaliere(Point p, int factor){
    p.x *= factor;
    p.y *= factor;
}

答案 2 :(得分:-1)

您可以随时制作自己的MutableInteger课程

class MutableInteger{
        private int value;

        public MutableInteger(int v){
            this.value = v;
        }

        public int get(){
            return value;
        }

        public void set(int newValue){
            this.value = newValue;
        }

        @Override
        public String toString() {
            return Integer.toString(value);
        }


    }

然后在您的代码中使用它:

public static void main(String[] args) {

    MutableInteger x = new MutableInteger(4);
    MutableInteger y = new MutableInteger(3);
        int faktor = 2;

        skaliere(x,y,faktor);

        System.out.println(x + " " + y);
    }

    public static void skaliere(MutableInteger x, MutableInteger y, int faktor){

        x.set(x.get() *faktor);
        y.set(x.get() *faktor);
    }

由于您正在创建自己的类,您甚至可以将skaliere方法移动到MutableInteger中

 class MutableInteger{
    ...
        public void skaliere(int faktor){
            this.value *=faktor;
        }
  }

使你的代码看起来像这样:

 public static void skaliere(MutableInteger x, MutableInteger y, int faktor){

      x.skaliere(faktor);
      y.skaliere(faktor);
    }

你甚至不再需要静态方法