将变量从函数返回到输入变量

时间:2014-11-12 18:10:26

标签: java android

如何通过调用函数来更改变量?

实施例

byte a;
...

void setBit(byte variable, byte n){
variable |= (1<<n);

}

...
setBit(a,2);

System.out.println(a); // expected output "2"

我可以写a = setBit(a,2);但那不是我需要的

来自Arduino的例子

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) 

2 个答案:

答案 0 :(得分:2)

您可以使用setter方法返回,如:

private byte setBit(byte variable, byte n){
     variable |= (1<<n);
     return variable;
}

将调用者代码修改为:

a = setBit(a, 2);

答案 1 :(得分:0)

答案是,除非您制作自己的ByteWrapper,否则无法修改它的内部结构。

你不能像c ++那样通过引用传递基本类型。 在很多情况下这是一件好事,在某些特殊情况下是一件值得怀念的事情。

类似于Venkatesh试图建议的,但不同之处在于它没有使用Byte(不可变的afaik)对象,你可以实现ByteWrapper,但它不会自动转换为字节基本类似Byte。你必须调用byteWrapper.getByte();

public class ByteWrapper {
    private byte byteValue = 0;
    public ByteWrapper(byte b) {
        byteValue = b;
    }

    public byte getByte() { return b; }
    public void setByte(byte b) { byteValue = b; }
}

然后你可以使用

void setBit(ByteWrapper bw, byte n){
    bw.setByte(byte.getByte() |= (1<<n));
}

然而,在这种情况下,+ 1,以及almas shaikh的回答是这样的。更简单,更优雅。