什么是null?
是null一个什么的实例?
什么集合null属于?
它是如何在记忆中表现出来的?
我正在尝试这段代码:
interface Callee {
public void foo(Object o);
public void foo(String s);
public void foo(Integer i);
}
class CalleeImpl implements Callee
public void foo(Object o) {
logger.debug("foo(Object o)");
}
public void foo(String s) {
logger.debug("foo(\"" + s + "\")");
}
public void foo(Integer i) {
logger.debug("foo(" + i + ")");
}
}
Callee callee = new CalleeImpl();
Object i = new Integer(12);
Object s = "foobar";
Object o = new Object();
callee.foo(i);
callee.foo(s);
callee.foo(o);
Run Code Online (Sandbox Code Playgroud)
这打印foo(Object o)三次.我希望方法选择考虑到真实的(不是声明的)参数类型.我错过了什么吗?有没有办法修改这个代码,以便打印foo(12), …
我正在使用代码:
System.out.println(null);
Run Code Online (Sandbox Code Playgroud)
它显示错误:
The method println(char[]) is ambiguous for the type PrintStream
Run Code Online (Sandbox Code Playgroud)
为什么没有null代表Object?
所以这就是这个例子
public static void main(String[] args) {
new Stuff(null);
new Stuff("a");
new Stuff(1);
}
Run Code Online (Sandbox Code Playgroud)
和类Stuff定义如下
public class Stuff {
Stuff(Object o){
System.out.println("object");
}
Stuff(String s){
System.out.println("string");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
string
string
object
Run Code Online (Sandbox Code Playgroud)
Java如何告诉它null是一个String?如果我换Stuff到
public class Stuff {
Stuff(String s){
System.out.println("string");
}
Stuff(Integer o){
System.out.println("Integer");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误Stuff(null):
The constructore Stuff(String) is ambigous.
Run Code Online (Sandbox Code Playgroud)
再说一次,为什么Java"决定" null是一个String?
可能重复:
NULL参数的方法重载
以下代码编译并正常运行.
public class Main
{
public void temp(Object o)
{
System.out.println("The method with the receiving parameter of type Object has been invoked.");
}
public void temp(String s)
{
System.out.println("The method with the receiving parameter of type String has been invoked.");
}
public void temp(int i)
{
System.out.println("The method with the receiving parameter of type int has been invoked.");
}
public static void main(String[] args)
{
Main main=new Main();
main.temp(null);
}
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,要调用的方法是接受类型参数的方法 String
该文档说.
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符.Java编程语言使用选择最具体方法的规则.
但我不明白当代码中接受原语参数的方法之一 …
当我执行下面的代码时,我得到以下输出:
调用String参数的方法......"
为什么?
public class StringObjectPOC {
public static void test(Object o) {
System.out.println("Method with Object argument Called ...");
}
public static void test(String str){
System.out.println("Method with String argument Called ...");
}
public static void main(String[] args) {
StringObjectPOC.test(null);
}
}
Run Code Online (Sandbox Code Playgroud) public class Test{
public static void abc(String s) {
System.out.println("String");
}
public static void abc(Object s) {
System.out.println("OBject");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
abc(null);
}}
Output-String
Run Code Online (Sandbox Code Playgroud)
我是java的初学者,我对上述程序的输出感到困惑.请解释一下输出的原因.
我知道原始数据类型的情况下的自动类型提升概念.但是在参考数据类型的情况下,我有下面的代码,它完美地工作.
public class Test4 {
void set(Object o) {
System.out.println("Inside Object");
}
void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);
}
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出数组.
但是如果代替Object o,如果我们有任何其他类,那么这将显示编译时错误该方法对于类型Test4是不明确的
下面的代码给出了编译时错误
public class Test4 {
/*void set(Object o) {
System.out.println("Inside Object");
}*/
void set(String s) {
System.out.println("String");
}
void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,每个参考数据类型(类,接口和数组)的默认值为null.
那么为什么上面的代码适用于Object o.
提前致谢
java ×8
null ×3
overloading ×2
oop ×1
println ×1
string ×1
system ×1
system.out ×1
terminology ×1