Java: 通过引用传递 int 的最佳方式

我有一个解析函数,它解析字节缓冲区中的编码长度,它返回解析后的长度为 int,并将一个索引作为整数 arg 放入缓冲区。我希望函数根据它解析的内容来更新索引,也就是说,希望通过引用传递索引。C 我刚刚通过了 int *。 在 Java 中最干净的方法是什么? 我目前正在寻找传递的索引参数。作为一个 int[],但它有点丑陋。

94441 次浏览

You can try using org.apache.commons.lang.mutable.MutableInt from Apache Commons library. There is no direct way of doing this in the language itself.

You cannot pass arguments by reference in Java.

What you can do is wrap your integer value in a mutable object. Using Apache Commons' MutableInt is a good option. Another, slightly more obfuscated way, is to use an int[] like you suggested. I wouldn't use it as it is unclear as to why you are wrapping an int in a single-celled array.

Note that java.lang.Integer is immutable.

This isn't possible in Java. As you've suggested one way is to pass an int[]. Another would be do have a little class e.g. IntHolder that wrapped an int.

Wrap the byte buffer and index into a ByteBuffer object. A ByteBuffer encapsulates the concept of a buffer+position and allows you to read and write from the indexed position, which it updates as you go along.

You can design new class like this:

public class Inte{
public int x=0;
}

later you can create object of this class :

Inte inte=new Inte();

then you can pass inte as argument where you want to pass an integer variable:

public void function(Inte inte) {
some code
}

so for update the integer value:

inte.x=value;

for getting value:

Variable=inte.x;

You can use java.util.concurrent.atomic.AtomicInteger.

You can create a Reference class to wrap primitives:

public class Ref<T>
{
public T Value;


public Ref(T value)
{
Value = value;
}
}

Then you can create functions that take a Reference as a parameters:

public class Utils
{
public static <T> void Swap(Ref<T> t1, Ref<T> t2)
{
T temp = t1.Value;
t1.Value = t2.Value;
t2.Value = temp;
}
}

Usage:

Ref<Integer> x = 2;
Ref<Integer> y = 9;
Utils.Swap(x, y);


System.out.println("x is now equal to " + x.Value + " and y is now equal to " + y.Value";
// Will print: x is now equal to 9 and y is now equal to 2

Hope this helps.