java - 通过引用传递double值

Oua*_*ais 10 java

如何在java中通过引用传递double值?

例:

Double a = 3.0;
Double b = a;
System.out.println("a: "+a+" b: "+b);
a = 5.0;
System.out.println("a: "+a+" b: "+b);
Run Code Online (Sandbox Code Playgroud)

此代码打印:

a: 3 b: 3
a: 5 b: 3
Run Code Online (Sandbox Code Playgroud)

我的问题是让它打印:

a: 3 b: 3
a: 5 b: 5
Run Code Online (Sandbox Code Playgroud)

我的目标:我正在jess中编写一个专家系统,在该应用程序中,一个段的长度将具有双倍值,现在双值不在单个段中; 它存在于许多其他部分,比例性类......等等,所有这些都引用它,等待它改变,以便它们可能符合一些规则.

如果我不能改变那个双,我就不能有一个包含引用该double值的对象的某个规则fire.

Edw*_*uck 9

Java不支持指针,因此您无法直接指向内存(如在C/C++中).

Java确实支持引用,但引用只是对象的引用.无法引用本机(内置)类型.因此,当您执行时(自动装箱将您的代码转换为以下内容).

双a =新双(3.0);

这意味着当你执行时

Double b = a;
Run Code Online (Sandbox Code Playgroud)

你获得了对象的引用.当您选择更改a时(自动装箱最终会将您的代码转换为此代码)

a = new Double(5.0);
Run Code Online (Sandbox Code Playgroud)

这不会影响b对先前创建的引用new Double(3.0).换句话说,你不能通过直接操作(或者在Java中没有"远处的动作")来影响b的引用.

也就是说,还有其他解决方案

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
Run Code Online (Sandbox Code Playgroud)


Jav*_*ker 5

包装器类型在Java中是不可变的.一旦创建它们,它们的值就不能改变(除了通过反射魔法).你为什么要做你正在做的事情?

编辑:只是详细说明,当你设置:

a = 5.0;
Run Code Online (Sandbox Code Playgroud)

实际上最终发生的事情是这样的:

a = new Double(5.0);
Run Code Online (Sandbox Code Playgroud)

如果double是可变的,你可以做类似的事情

a.setValue(5.0);// this would have worked for mutable objects, but not in this case
Run Code Online (Sandbox Code Playgroud)

你当然可以写自己的课程,但这里有很多陷阱,所以最好解释一下你的目标


Voo*_*Voo 2

@Title本身:你不能没有“肮脏”的技巧。最简单的方法是传递一个数组 - 或包含该字段的类。对这些的改变将会得到很好的反映。

但你的问题完全不同:双精度数是不可变的,因此每次对其进行更改都会返回一个新值。除了实现您自己的类之外,您对此无能为力。