【发布时间】:2015-11-30 14:44:12
【问题描述】:
public class Test{
public static void m1(Object o){
System.out.println("object called");
}
public static void m1(String s){
System.out.println("String called");
}
}
现在,这里有以下案例,
- m1("字符串"); 输出:字符串调用
- m1(新字符串(“字符串”)); 输出:字符串调用
- 对象o =“字符串”; m1(o); 输出:被调用的对象
- 对象 o = new String("string"); m1(o); 输出:被调用的对象
- 对象o =新对象(); m1(o); 输出:被调用的对象
有人可以解释一下上述情况吗?
【问题讨论】:
-
每个变量
o都定义为Object,因此它调用m1(Object)。使用String的呼叫也会发生同样的情况。 -
Object o = "string"执行类型擦除,您已强制将String视为通用Object。将o传递给m1()使用对象版本,因为这是变量o的类型。
标签: java