我想在某个类中存储对变量的引用,并在此类中对其进行操作。操作应该修改原始变量。 特别是下面的代码应该打印1而不是0。
class Test {
private Long metric;
public Test(Long m) {
this.metric = m;
++this.metric;
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Long metric = 0L;
Test test = new Test(metric);
System.out.println(metric);
}
}
如何实现这种行为?
答案 0 :(得分:5)
您可以将Long
替换为可变的AtomicLong
。你会丢失自动装箱功能。
答案 1 :(得分:2)
代码中的问题是 Integer
是一个不可变的类。
每次更改值时,您实际上都在构建一个新的Integer实例。
对可变对象执行相同操作将起作用。
例如
class Test {
private StringBuilder metric;
public Test(StringBuilder m) {
this.metric = m;
this.metric.append(" Xter");
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
StringBuilder b = new StringBuilder("Hello ");
Test test = new Test(metric);
System.out.println(b.toString());
// Will print Hello Xter
}
}
答案 2 :(得分:0)
正如已经提到的,原始包装类是不可变的。
由于您的度量标准在Test中是私有的,并且您希望在调用方法main中使用它的值,因此您应该使用java bean准则并为其使用getter:
public Long getMetric(){return this.metric;}
主要:
metric=test.getMetric();
System.out.println(metric);