java - 通过引用传递 double 值

标签 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);

此代码打印:

a: 3 b: 3
a: 5 b: 3

我的问题是让它打印:

a: 3 b: 3
a: 5 b: 5

我的目标: 我正在用 jess 编写一个专家系统,在那个应用程序中,一个段的长度会有一个 double 值,现在 double 值不在一个段中;它在许多其他部分、比例类等中,所有这些都在引用它,等待它发生变化,以便它们可能满足某些规则。

如果我无法更改那个 double 值,我就无法触发包含引用该 double 值的对象的特定规则。

最佳答案

Java不支持指针,所以不能直接指向a的内存(C/C++)。

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

双 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

关于java - 通过引用传递 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749251/

相关文章:

java - 试图压缩引用电子表格的代码

java - 如何在Java中更改一个文件,同时保持另一个硬链接(hard link)中的内容不变?

java - 传递给持久化的分离实体

java - 如何在 Java 控制台中打印波斯语和阿拉伯语 (utf-8) 字符?

java - 为什么 nio.files.copy 比 nio.fileChannel 复制慢很多?

java - 状态如何在 Spring OAuth2 中进行编码或加密?

java - HTTp/tomcat base64 编码

java - Azure 数据工厂 - 无法验证 invalid_grant

java - 使用 JavaFX 创建列和行约束的循环

java - Android Studio 如何为单次和双次后退按钮按下执行不同的任务