如何正确调用返回引用类型的方法?

How to invoke method returning reference type properly?

我正在阅读有关返回引用类型结果的方法的 Oracle Java 教程,但被卡住了好几个小时。这里提供link。

https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

public class Bicycle {

    private int speed = 0;

    public Bicycle(int a) {
        speed = a;
    }

    public static Bicycle seeWhosFastest (Bicycle bicycle1, Bicycle bicycle2) {

        Bicycle fastest = bicycle1;

        if (bicycle1.speed < bicycle2.speed) {
            fastest = bicycle2;
        }

        return fastest;
    }

    public static void main(String[] args) {

        Bicycle firstBicycle = new Bicycle(100);
        Bicycle secondBicycle = new Bicycle(200);

        Bicycle.seeWhosFastest(firstBicycle, secondBicycle);
    }

}

但是,我无法让它按预期工作。我希望至少打印出 bicycle2 对象,但没有显示。

你们能帮帮我吗在此先谢谢了。

你没有打印任何东西;您所做的只是机械地计算哪个 Bicycle 实体最快的结果。

为了查看结果,您需要做两件事:

  • System.out.println 调用包裹 Bicycle.seeWhosFastest(firstBicycle, secondBicycle) 行,
  • Bicycle 中实施 toString,这样您就不会得到无用的信息。

toString方法很简单:

@Override
public String toString() {
    return "Bicycle, with speed " + speed;
}

考虑到您的静态 seeWhosFastest 方法 returns 您可以编写一个 Bicycle 引用类型:

public static void main(String[] args) {

        Bicycle firstBicycle = new Bicycle(100);
        Bicycle secondBicycle = new Bicycle(200);
        Bicycle fastestBike = Bicycle.seeWhosFastest(firstBicycle, 
secondBicycle);
        System.out.println(fastestBike);
}

为了打印一些重要的东西,你需要用类似于@Makato 的例子

的东西覆盖你的 Bicycle class 的 toString 方法

根据您的评论进行编辑:

首先向你的 Bicycle 添加第二个成员变量 class 类似于:

private String reference;

然后添加一个 toString 方法(也在你的 Bicycle class)

public String toString() {
    return reference;
}

现在将您的自行车构造器更新为

public Bicycle(int speed, String reference) {
    this.speed = speed;
    this.reference = reference;
}

现在改变你的主要方法如下:

public static void main(String[] args) {

        Bicycle firstBicycle = new Bicycle(100, "Bicycle1");
        Bicycle secondBicycle = new Bicycle(200, "Bicycle2");
        Bicycle fastestBike = Bicycle.seeWhosFastest(firstBicycle, 
secondBicycle);
        System.out.println(fastestBike);
}

它应该按预期工作

希望对您有所帮助