如何通过调用函数来更改变量?
实施例
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))
答案 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的回答是这样的。更简单,更优雅。