public class Main {
public void test(Object o) {
System.out.println("Object");
}
public void test(String s) {
System.out.println("String");
}
public static void main(String[] args) {
Main that = new Main();
that.test(null);
}
}

这段代码运行的结果是

J:\test>java Main
String J:\test>

因为Java处理null时会优先处理更确切的对象

如果此时还有一个多态方法是ArrayList,程序会报错(编译阶段),因为不知道去适配String还是ArrayList

J:\test>javac Main.java
Main.java:14: error: reference to test is ambiguous
that.test(null);
^
both method test(String) in Main and method test(ArrayList) in Main match
1 error

如果是基础数据类型和对象类型,则会适配对象类型

J:\test>type Main.java
import java.util.ArrayList;
public class Main {
public void test(Object o) {
System.out.println("Object");
}
public void test(String s) {
System.out.println("String");
}
// public void test(ArrayList a){
// System.out.println("ArrayList");
// }
public void test(int i){
System.out.println("int");
}
public static void main(String[] args) {
Main that = new Main();
that.test(null);
}
}
J:\test>javac Main.java J:\test>java Main
String J:\test>

如果只有基础数据类型和Object,因为Object是对象,则调用Object

J:\test>type Main.java
import java.util.ArrayList;
public class Main {
public void test(Object o) {
System.out.println("Object");
}
// public void test(String s) {
// System.out.println("String");
// }
// public void test(ArrayList a){
// System.out.println("ArrayList");
// }
public void test(int i){
System.out.println("int");
}
public static void main(String[] args) {
Main that = new Main();
that.test(null);
}
}
J:\test>javac Main.java J:\test>java Main
Object J:\test>

如果只有基础数据类型,则编译报错,因为java不支持int与null转换

J:\test>javac Main.java
Main.java:17: error: incompatible types: <null> cannot be converted to int
that.test(null);
^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error J:\test>

最新文章

  1. Java魔法堂:finalize函数
  2. [其他]Ubuntu安装genymotion后unable to load VirtualBox engine
  3. CF# Educational Codeforces Round 3 C. Load Balancing
  4. composer -vvv
  5. SharePoint 指定配置数据库访问账户“域账户\用户”
  6. Php学习之SESSION反序列化机制
  7. javascript实例学习之一——联动下拉框
  8. 配置SecondaryNameNode
  9. 用python做些有意思的事——分析QQ聊天记录——私人订制
  10. (转)在Windows上以服务方式运行 MSOPenTech/Redis
  11. 【C#】线程池
  12. PHP 实现下载文件的方法
  13. &lt;a&gt;标签的href属性
  14. AngularJs练习Demo18 Resource
  15. jquery之下拉列表select
  16. Google 开源项目风格指南阅读笔记(C++版)
  17. (2)入门指南——(7)添加jquery代码(Adding our jQuery code)
  18. java.lang.reflect.InvocationTargetException
  19. WordPress彩色背景标签云实现
  20. Nokia大事录

热门文章

  1. 【转】javascript 执行环境,变量对象,作用域链
  2. oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
  3. c#文件下载---以文件流形式
  4. MyBatis 学习记录4 MyBatis的一级缓存
  5. Spring 学习记录7 初识XmlWebApplicationContext
  6. cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题
  7. Elasticsearch-PHP 处理JSON数组和对象
  8. 解剖Nginx&#183;模块开发篇(5)解读内置非默认模块 ngx_http_stub_status_module
  9. 学习h5(开始)
  10. 380. Insert Delete GetRandom O(1) 设计数据结构:在1的时间内插入、删除、产生随机数