2010-10-29 65 views
6

只是想知道为什么可以传递Integer作为参数,其中方法参数是int类型,反之亦然?将整数传递给int,反之亦然

public class Salmon { 

public static Integer foo(Integer a, int b){ 
    return a - b; 
} 
public static void main(String[] args) { 
    Integer a = 10; 
    int b = 1; 
    foo(b, a); 
} 
} 

回答

7

这是自动装箱自动拆箱。基本上,编译器会适当地调用Integer.valueOf()x.intValue()

确切的机制实际上没有指定,但规范的相关部分是5.1.7 and 5.1.8

+3

应该指出的是,这个功能带来了一类神秘的NullPointerException问题。 – Pointy 2010-10-29 13:01:22

+0

你能发展吗?在这种情况下会抛出一个NullPointerException? – mxdsp 2017-12-06 10:20:37

+0

@mxdsp:根本不是问题的一部分。如果您遇到NPE,您无法解释,请在进行彻底研究后再提出一个新问题。 (关于NPE,有很多*问题。) – 2017-12-06 10:25:35