foo(int)不适用于参数(String)

时间:2016-05-22 05:37:11

标签: java string arguments overloading

我正在尝试调用我的方法m1(int),但在尝试使用String作为输入时出错。

背后的原因是什么?

class TestSuper
{

    public void m1(int i)
    {
        System.out.println("int-arg");
    }
    public void m1(float f)
    {
        System.out.println("float-arg");
    }

    public static void main(String[] args){
        TestSuper t = new TestSuper();
        t.m1(10.5f);
        t.m1(10);
        t.m1("Name");  // <- Where I get the error.
    }

}

1 个答案:

答案 0 :(得分:1)

对于初学者,您正尝试在对象String和基元int之间进行投射。这根本行不通。对象不能转换为基元,反之亦然。

A String,包含一个包裹在对象中的char数组 int,由单个带符号的十进制数组成。

当您尝试运行需要int String的方法时,您没有为其提供数字,而是为其提供char,被投射到int

此外,您设置重载的方式,无法区分天气与否,您使用的是m1(int)方法或m1(float)方法。要解决此问题,您应该添加以下方法:

public void m1(String s) {
    System.out.println("String-arg");
}

将来,要在Stringint之间进行投射,请使用:

int i = Integer.parseInt("44");  // Equal to 44.

然后冒着回报NumberFormatException的风险,这样才安全:

public void randomMethod(String input) {
    int i = 0;
    try {
        i = Integer.parseInt(input);
    } catch (NumberFormatException e) {}  // Fill in with your requirements.
}