Java : Best way to pass int by reference

后端 未结 7 2182
不知归路
不知归路 2020-11-28 05:36

I have a parsing function that parses an encoded length from a byte buffer, it returns the parsed length as an int, and takes an index into the buffer as an integer arg. I

相关标签:
7条回答
  • 2020-11-28 05:49

    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.

    0 讨论(0)
  • 2020-11-28 06:01

    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.

    0 讨论(0)
  • 2020-11-28 06:06

    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.

    0 讨论(0)
  • 2020-11-28 06:07

    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.

    0 讨论(0)
  • 2020-11-28 06:09

    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.

    0 讨论(0)
  • 2020-11-28 06:11

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

    0 讨论(0)
提交回复
热议问题