如果一个类有两个方法,分别带有不同参数,如下:
class A 
{
long increment(long x)   //long版本

return (x + 10); 
} int increment(int x)     //int版本

return x + 20; 
} static public void main(String[] args) 
{
A a = new A(); 
System.out.println( a.increment(10));   //如何判断?
}
}请问:如果参数类型非常接近,根据什么来判断调用的是哪个方法?
如果我将long和int换成float和double,调用a.increment(1.4)会得到社么结果呢?
有什么规律吗?

解决方案 »

  1.   

    像long和float数值一般在后边是加一个l和f吧.
      

  2.   

    根据本人估计是按照接近原则,你的数据如果是1-10的21次方的话那它应该算你是INT.超过这个才算你是LONG
      

  3.   

    a.increment(1.4f)编译器就认为方法increment(float x)
    什么都不加。编译器默认为方法increment(double x)
      

  4.   

    方法重载是在编译期决定, 也就是说在编译时就已经选择好了会调用哪个方法, 这点与动态选择的方法覆盖(多态)不一样. 一般的建议是: 使用重载要谨慎, 而且尽量避免编写两个具有相同参数个数的重载方法.(Effective Java 26条)就楼主的问题而言, a.increment(2), 2的编译期类型是int, 所以会调用a.increment(int)版本.float和double类似, 注意a.increment(2.4)会调用double的版本, 因为2.4就是double类型的,除非你指定2.4f
      

  5.   

    float 和 double怎么区分呢?还是不太明白,为什么2.4f就是float,没加f 就是double?都是2.4啊
      

  6.   

    类型匹配对应!数字不加后缀(l,f)都有一个默认的类型的,如:
    1.4是double
    12是int
    2234567800也是int,不过它溢出了
      

  7.   

    有个概念啊:字面值的类型
    数字10  是 int型
        2.4 是double型
    同样其它类型的值也类似,注意,这个是规定,没有理由可讲
    如果你想用一个long型的10,必须这样用:10L
      

  8.   

    这是java 的语法规则
    如果是float 数值后加f,如果是long数值后加l,
    如果是个整数默认就是int,如果是个小数,默认就是double
      

  9.   

    java中小数常量默认的就是double型的2.4就是double型的 如果想把它定义做float的 那就在2.4后加上f 整数在不在溢出的时候都是int型的 应该这些都是规定的  要不怎么还会有类型提升这种说法呢
      

  10.   

    jk88811(jkzqw) 回答不错,应该给分了