2014-12-08 36 views
0

这是我的代码:为什么它总是给呼叫的整数参数方法不淡参数法

public class Test 
{ 
    public static void main(String arg[]) { 
     new Test().method1(5); 
    } 
    public void method1(int b) { // integer method 
     System.out.println("integer "); 
    } 
    public void method1(short a) { // short method 
     System.out.println("short"); 
    } 
} 

我运行这个类,它给我造成的integer。为什么它不给short

回答

2

因为字面5默认被理解为int。如果你要拨打的method1(short a)方法,你需要明确做投:

new Test().method1((short) 5); 
1

文字5的类型为int,这就是为什么期望调用int的方法。

new Test().method1((short)5)会调用期望short的方法。

+0

所以只是好奇,没有办法给用户的输入转换为数字数据类型和如果它适合总之,自动调用短方法等。 – 2014-12-08 09:31:21

+0

@RoyalBg nope。这将是一个坏主意,我不能看到积极的一面。它几乎肯定会比使用'int'操作更慢(请参阅我对此问题的回答)。 – 2014-12-08 09:32:49

+0

@RoyalBg显然你可以自己做检查,然后转换成适合的最小类型。 – 2014-12-08 09:33:37

0

的Java整型常量的默认类型为int这就是为什么找调用整数方法。

0

你必须申请type conversion,因为你愿意调用一个接收短的函数。

尝试调用:(short)5

0

这是因为,在其他的答案指出,本身就是一个5表示int。您可以通过附加L来表示long,因此5L将被视为long。如果你想要一个byteshort那么你必须明确地施放。

这可能是你有一个很好的理由需要一个方法,需要short,但请记住,这是非常罕见的。当然,出于性能方面的考虑,你不会希望这样做。 Java在默认情况下使用32位的int,因为几乎每个处理器都可以使用32位整数本地工作。您将大概发现short将运行更缓慢int

(当然,如果你是专门做16位运算,那么你可能还需要使用short。)

相关问题