如何在java中通过引用传递双精度值?
示例:
Double a = 3.0;
Double b = a;
System.out.println("a: "+a+" b: "+b);
a = 5.0;
System.out.println("a: "+a+" b: "+b);此代码打印如下:
a: 3 b: 3
a: 5 b: 3我的问题是把它打印出来:
a: 3 b: 3
a: 5 b: 5我的目标是:我正在用jess写一个专家系统,在这个应用程序中,一个段的长度应该是双精度的,因为双精度值不是在一个单独的段中;它在许多其他的段中,比例classes..etc,所有这些都在引用它,等待它改变,这样它们可能会满足一些规则。
如果我不能改变那个双精度值,我就不能有一个包含引用双精度值的对象的特定规则触发。
发布于 2011-04-22 04:16:00
Java不支持指针,所以你不能直接指向a的内存(就像在C/C++中一样)。
Java确实支持引用,但引用仅是对对象的引用。不能引用本机(内置)类型。所以当你执行时(自动装箱为你把代码转换成了下面的代码)。
双a=新双精度(3.0);
这意味着当你执行
Double b = a;您将获得对a的对象的引用。当你选择改变一个(自动装箱最终会把你上面的代码转换成这个)
a = new Double(5.0);这不会影响b对先前创建的new Double(3.0)的引用。换句话说,您不能通过直接操作a来影响b的引用(或者在Java中没有“远程操作”)。
也就是说,还有其他的解决方案。
public class MutableDouble() {
private double value;
public MutableDouble(double value) {
this.value = value;
}
public double getValue() {
return this.value;
}
public void setValue(double value) {
this.value = value;
}
}
MutableDouble a = new MutableDouble(3.0);
MutableDouble b = a;
a.setValue(5.0);
b.getValue(); // equals 5.0发布于 2011-04-22 04:10:16
包装器类型在Java中是不可变的。一旦它们被创建,它们的值就不能被改变(当然除了通过反射魔法)。你为什么要尝试做你正在做的事情呢?
编辑:只是为了详细说明,当您设置时:
a = 5.0;实际发生的事情是这样的:
a = new Double(5.0);如果double是可变的,你可以这样做
a.setValue(5.0);// this would have worked for mutable objects, but not in this case当然,您也可以编写自己的类,但这里有很多陷阱,所以最好解释一下您的目标
发布于 2011-04-22 04:13:50
您可以尝试使用commons-lang中的MutableDouble。
但这并不是说这与按引用传递无关-您没有传递任何内容。
https://stackoverflow.com/questions/5749251
复制相似问题