在android中传递引用作为参数

时间:2012-02-17 06:53:32

标签: java android pass-by-reference

我是java / android的新手。我是一名c / c ++开发人员。我可以知道如何在android中传递引用作为参数。下面显示的说明性c示例代码

void main()
{
  int no1 = 3, no2 = 2, sum = 0;
  findsum( no1, no2, sum );
  printf("sum=%d", sum );
}

void findsum( int no1, int no2, int& sum )
{
  sum = no1 + no2;
}

请建议我一个解决方案

感谢

3 个答案:

答案 0 :(得分:7)

您无法在 Java 中传递int作为参考。 int是主要类型,只能通过值传递。

如果你仍然需要传递一个int变量作为引用,你可以将它包装在一个可变类中,例如一个int数组:

void findsum( int no1, int no2, int[] sum )
{
  sum[0] = no1 + no2;
}

无论如何,我强烈建议您重构代码以使其更加面向对象,例如:

class SumOperation {
   private int value;

   public SumOperation(int no1, int no2) {
      this.value = no1 + no2;
   }

   public int getReturnValue() { return this.value; }
}

答案 1 :(得分:1)

Java中没有通过引用传递。

答案 2 :(得分:0)

我是这样解决这个问题的:

// By using a wrapper class.
// This also works with Class objects.
class IntReturn {
    public int val;
}

// For example:
class StringReturn {
    public String val;
}

class Main {
    public static void main (){
        IntReturn iRtn = new IntReturn();
        
        if(tryAdd(2, 3, iRtn)){
            System.out.println("tryAdd(2, 3): " + iRtn.val);
        }
    }

    public static boolean tryAdd(final int a, final int b, final IntReturn iRtn){
        iRtn.val = a + b;

        return true;  // Just something to use return
    }
}

为此,我有一个此类类的个人库。 Lambda 是这些类的另一个原因,因为您需要有一个“最终”变量来从 Lambda 中获取值,而不是通过 return 语句。