方法返回Double而不是Integer

时间:2016-03-26 04:25:40

标签: java

  private Integer[] array = new Integer[]{1, 2, 3, 4};

    Number getValueByIndex(int index)
    {
        return (index >= 0 && index < array.length) ? array[index] : new Double(-1);
    }

    public static void main(String[] args)
    {
        Number value1 = new Solution().getValueByIndex(5); //-1.0, class java.lang.Double expected
        Number value2 = new Solution().getValueByIndex(2); //3, class java.lang.Integer expected

        System.out.println(value1 + ", " + value1.getClass().toString());
        System.out.println(value2 + ", " + value2.getClass().toString());
    }

我无法弄清楚为什么方法在第二种情况下返回Double而不是Integer。

3 个答案:

答案 0 :(得分:1)

Arthur,请仔细检查此代码部分

return (index >= 0 && index < array.length) ? array[index] : new Double(-1);

它基本上转化为

  

当您传递的值大于&#34; 数组&#34;的大小时,请返回双值new Double(-1)参数&#34; index &#34;

由于您的方法返回&#34; 数字&#34; type是所有数字类的超类,它接受值,并且toString()打印为十进制值。希望能帮助到你。 您可以在Java API文档中查看Number类。 https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html

答案 1 :(得分:1)

这是因为有两种不同的类型(可转换为数字类型)在条件表达式中用作第二和第三个操作数。

如何确定条件表达式的类型:http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25

答案 2 :(得分:1)

查看Number的文档。我在这里引用相关部分:

  

Number的子类必须提供转换表示的方法   数值为byte,double,float,int,long和short。

当你不遵循文件所说的时,你肯定会有一些奇怪的行为。因此,在您的情况下,如果值为int,则应使用intValue(),并使用doubleValue()