java - 为什么 Java 会更新多个具有相同值的变量?

标签 java class variables methods reference

我有一个名为 Time 的类,其中包含实例具有“小时”和“分钟”参数的对象。该类中有一个名为 addMinutes 的方法,它接受一个整数并将该分钟数添加到对象的“小时”和“分钟”参数中。

我在另一个名为“Exercise”的类中有一个构造函数方法,该方法应该使用以下参数创建一个对象: 称为 extype 的字符串对象 名为 min 的 int 对象 称为 start 的时间对象 称为结束的时间对象

我希望构造函数初始化 start,然后使用 Time 中的 addMinutes 方法添加分钟数并调用 end。但是当我使用它时,即使它们是单独的变量,开头也会随结尾更新。

这是 addMinutes 方法

public void addMinutes(int mins) {
   this.mins += mins;
        if (this.mins >= 60) {
            addHours(this.mins / 60);
            this.mins = this.mins % 60;
      }

这是尝试使用它和输出的示例

    public Exercise(String e, int m, Time s) {
       extype = e;
       min = m;
       start = s;
       System.out.println(start);
       end = s;
       System.out.println(start);
       end.addMinutes(min);
       System.out.print(s);
       start = s;
       System.out.println(start);

使用 e = "Dancing"、m = 90 和 S = 15:45 运行此程序的输出

练习 e1 = new 练习("跳舞",90,第一次);

15:45

15:45

17:15 17:15

因此,当我使用 end.addMinutes(min) 时,所有变量、开始、结束甚至 s 都会更新为我想要的结束时间。对此有什么见解吗?

谢谢。

最佳答案

这是因为 Java 使用对象的引用,而不是值

因此,当您执行 start = s 时,它不会将 start 设置为 s 的值,而是将 start 设置为与 s 相同的对象。其他作业依此类推。

然后,当您对其中任何一个(即:start、end 或 s)调用方法时,您将在一个且仅一个由这三个变量引用的对象上调用此方法。

关于java - 为什么 Java 会更新多个具有相同值的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725554/

相关文章:

android - 如何使用 Mockito 2 在 java/android 测试下模拟最终类?

Java GUI 不会显示输入中的 JLabel

java - 在 Java 中逐字地在多个字符之后包装字符串

class - 如何编写枚举类型的 Swift 泛型函数?

javascript - 使用变量指定选择框获取更改选择框的选定值

c++ - 如何从 C++ 中的 tensorflow 变量获取数据

javascript - Node .js/javascript : trying to set variable equal to the value returned by a function

java - 在小型 Java 游戏中处理两个 While 循环

java - 解析 csv 文件并存储结果,因为 JFree 图表数据集消耗堆空间

PHP类的继承和重写?