java - 在调用参数为 (int, int) 的方法、带有签名 (int, int) 或 (Integer, Integer) 的方法时,将给出首选项
问题描述
我有将参数传递为(4,5)的方法调用。
我有两种带参数的方法:
method1(int a, int b);
method1(Integer a, Integer b);
哪个方法会被调用,为什么?
解决方案
这已在Java® 语言规范第 15.12.2 节中指定。编译时步骤 2:确定方法签名:
…</p>
该过程的其余部分分为三个阶段,以确保与 Java SE 5.0 之前的 Java 编程语言版本兼容。阶段是:
- 第一阶段(第15.12.2.2 节)执行重载决议,不允许装箱或拆箱转换,或使用变量 arity 方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段。
…</li>- 第二阶段(第15.12.2.3 节)执行重载决议,同时允许装箱和拆箱,但仍然排除使用变量 arity 方法调用。如果在此阶段没有找到适用的方法,则处理继续到第三阶段。
…</li>- 第三阶段(第 15.12.2.4 节)允许将重载与可变参数方法、装箱和拆箱相结合。
因此,既然method1(int a, int b)
是在第一阶段发现的,就会被使用。method1(Integer a, Integer b)
如果在第一阶段没有找到匹配方法,则只会在第二阶段找到。
推荐阅读
- c - 编译器警告我的函数永远不会执行
- python - itertools.imap 操作 Python 2
- node.js - 拒绝kafka中的消息使用no-kafka
- spring-boot - AWS Beanstalk 中的 Spring Boot 应用程序战争部署
- google-chrome - Chrome 扩展和 IndexDB 集成
- html - Z-index 不使元素出现在其他元素之上
- javascript - 如何使用 ErrorBoundary 和 componentDidCatch 创建处理程序错误组件
- javascript - 如何使用 bitcoinjs 从公钥中获取比特币地址
- sql - SQL:搜索正确的记录组
- windows - CMake 在 Windows 上使用 MSYS2/mingw64 “找不到 OpenSSL”