我在下面的两个 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 变量的第二个片段中却没有观察到它? 我在这里错过了什么吗?请赐教。预先感谢。
您的
setSpeed
类中的 Bike
方法有一个错误:
public void setSpeed(double s1) {
this.speed = speed;
}
应该是:
public void setSpeed(double s1) {
this.speed = s1;
}
在错误的版本中,您只是将速度分配给自身,这意味着它不会改变其值。修复此错误后,您应该在两个代码片段中观察到相同的行为。