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

我有一个parsing函数,它parsing字节缓冲区中的编码长度,它将parsing的长度作为int返回,并将一个索引作为整数arg存入缓冲区。 我希望函数根据它被parsing的内容来更新索引,也就是想通过引用来传递索引。 在C我只是传递一个int * 。 Java中最简洁的方法是什么? 我目前正在考虑通过索引参数。 作为一个int[] ,但它有点难看。

您可以尝试使用Apache Commons库中的org.apache.commons.lang.mutable.MutableInt 。 语言本身没有直接的做法。

这在Java中是不可能的。 正如你所build议的一种方法是传递一个int[] 。 另一个会有一个小的类,例如IntHolder包装一个int

将字节缓冲区和索引包装到一个ByteBuffer对象中。 ByteBuffer封装了缓冲区+位置的概念,并允许您从索引位置进行读取和写入,并随着更新而进行更新。

你不能在Java中通过引用来传递参数。

你可以做的是将你的整数值包装在一个可变的对象中。 使用Apache Commons的MutableInt是一个不错的select。 另一种稍微混淆的方式是使用你所build议的int[] 。 我不会使用它,因为它不清楚为什么你在一个单细胞数组中包装int

请注意, java.lang.Integer是不可变的。

你可以使用java.util.concurrent.atomic.AtomicInteger

你可以devise这样的新课程:

 public class Inte{ public int x=0; } 

以后你可以创build这个类的对象:

 Inte inte=new Inte(); 

那么你可以传递inte作为你想传递一个整型variables的参数:

 public void function(Inte inte) { some code } 

所以为了更新整数值:

 inte.x=value; 

为了获得价值:

 Variable=inte.x; 

你可以创build一个Reference类来包装原语:

 public class Ref<T> { public T Value; public Ref(T value) { Value = value; } } 

然后你可以创build带有Reference的函数作为参数:

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

用法:

 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 

希望这可以帮助。