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
希望这可以帮助。