当前位置: 代码迷 >> 综合 >> Java面试之NULL
  详细解决方案

Java面试之NULL

热度:56   发布时间:2023-10-25 10:29:02.0

1、下面程序能正常运行吗?

public class NULL {public static void haha(){System.out.println("haha");}public static void main(String[] args) {((NULL)null).haha();}}

能正常运行。输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。

 

2、下面代码的结果是什么?

public class Test {public void myMethod(String str) {System.err.println("string");}public void myMethod(Object obj) {System.err.println("object");}public static void main(String[] args) {Test t = new Test();t.myMethod(null);}}

这道题考察重载方法参数具有继承关系时的调用问题,还有对null的认识。如果是一般具有继承关系的对象分别作为参数,看对象的引用,如:

class A {}class B extends A {}public class Test {public static void main(String[] args) {A b1 = new B();B b2 = new B();get(b1);// Aget(b2);// B}public static void get(A a) {System.out.println("A");}public static void get(B a) {System.out.println("B");}}

Object是一切类的父类,具有继承关系,那null是指向什么呢?null是任何引用类型的初始值,String和Object的初始值都是null,但是null会优先匹配引用类型参数为String的方法,因此这道题答案是string。假设这道题中还有其他同是引用类型的重载方法呢?如:

public void myMethod(Integer obj) {System.err.println("Integer");
}

如果是这样的话,调用这个方法传入参数null时会报错,他不知道选哪个方法进行匹配调用了。