JAVA传值异常如下代码片段

问题描述 投票:0回答:1

我在下面的两个 Java 代码片段中得到了不同的行为,我用这两个代码片段来理解其按值传递的工作方式

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) {
        A a = new A(10);
        System.out.println("a before changeValue:"+a.getModel());
        changeValue(a);
        System.out.println("a after changeValue:"+a.getModel());
    }
    
    private static void changeValue(A x) {
        x.setModel(20);
    }
}

class A{
    private double model;

    public A(double m){
        this.model = m;
    }

    public double getModel() {
        return model;
    }

    public void setModel(double model) {
        this.model = model;
    }
}

在上面我得到的输出为

a before changeValue:10.0
a after changeValue:20.0

现在看这个片段

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) {
        Bike pulsar = new Bike(220);
        System.out.println("Pulsar's Speed is ="+pulsar.getSpeed());
        Demo(pulsar);
        System.out.println("Pulsar's Speed after Demo is ="+pulsar.getSpeed());
    }
    private static void Demo(Bike b) {
        b.setSpeed(300);
    }
  
}

class Bike {
    private double speed;
    public void Model(){}
    public Bike(double s){
        this.speed=s;
    }
    public double getSpeed() {
        return speed;
    }
    public void setSpeed(double s1) {
        this.speed = speed;
    }
}

我得到了

Pulsar's Speed is =220.0
Pulsar's Speed after Demo is =220.0

为什么第一个片段中 a 变量的值发生了变化,而在 pulsar 变量的第二个片段中却没有观察到它? 我在这里错过了什么吗?请赐教。预先感谢。

java class java-11 pass-by-value
1个回答
0
投票

您的

setSpeed
类中的
Bike
方法有一个错误:

public void setSpeed(double s1) {
    this.speed = speed;
}

应该是:

public void setSpeed(double s1) {
    this.speed = s1;
}

在错误的版本中,您只是将速度分配给自身,这意味着它不会改变其值。修复此错误后,您应该在两个代码片段中观察到相同的行为。

© www.soinside.com 2019 - 2024. All rights reserved.