java - 为什么缺席返回类型没有编译错误

标签 java compiler-errors return-type


我试图理解方法重载的概念。

public class Demo {

    public int myMethod(int num1, int num2) {
        System.out.println("First myMethod of class Demo");
        return num1 + num2;
    }

    public double myMethod(double var1, double var2) {
        System.out.println("Second myMethod of class Demo");
        return var1 - var2;
    }

    public static void main(String args[]) {
        Demo obj1 = new Demo();
        //here
        obj1.myMethod(10, 10);
        // and here
        obj1.myMethod(20, 12);
    }
}

我试图找出为什么 obj1.myMethod(10, 10); 中缺少返回类型没有编译错误 obj1.myMethod(20, 12); 声明。
显然 myMethod() 都返回 int 和 double。

为什么没有编译错误呢?请帮助我理解。

最佳答案

myMethod() 都返回一些内容。您调用这些方法:

obj1.myMethod(10, 10);
obj1.myMethod(20, 12);

但是你对这个返回值什么也不做。您可能需要考虑将这些方法的返回值存储在变量中,例如:

int first = obj1.myMethod(10, 10); //assigning return value of myMethod to int variable

然后您可以打印first,看看使用myMethod()计算出的返回值是多少:

System.out.println(first);

另一种可能性,不是将返回值存储在变量中,而是直接将返回值打印到控制台:

System.out.println(obj1.myMethod(10, 10));

请注意,在这两个方法调用中:

obj1.myMethod(10, 10);
obj1.myMethod(20, 12);

正在调用返回 int 的方法 (public int myMethod(int num1, int num2) {...})。这是因为您将 int 参数传递给 myMethod()。如果您希望调用返回 double 的方法变体,您可以将参数更改为 double 值:

obj1.myMethod(20.0, 12.0); // here you pass two double values as arguments

或者:

obj1.myMethod((double) 20,(double) 12); // here you cast int values to double

关于java - 为什么缺席返回类型没有编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766422/

相关文章:

java - 用于在 java 中将 CamelCase 转换为 camel_case 的正则表达式

c++多重继承和显式构造函数调用

c++ - C++非法其他

java - 方法返回类型 String 不是 String

java - 如果使用 gl_color 则 GLSL 不会渲染

java - 使用 JPA 关系查询时非法尝试取消引用集合

c++ - 变量内部变量的问题一旦更改就会恢复

java - 如何返回扩展对象(子类)?实际上,如何返回已传递给方法的确切对象?

java - 如何从 Spring 批处理作业中终止步骤

java - 无法解析为类型-在RHEL 5上编译servlet(tomcat)时出错