import junit.framework.TestCase;
public class NullTest extends TestCase{
public void testNull(){
Object a = null;
assert(a.equals(null));
}
}
本来以为这样回报空指针异常,但这个测试通过了~为什么?
于是有个逻辑我就搞不清了:// a = null;
// a.equals(null)// 看equals的函数原型 equals(Object obj)
// 于是我可以说 null is Object
// 但这个“特殊”的Object 却不能 null.equals(null)
// 为什么?
请列位给深度解释一下,谢谢?
解决方案 »
- 我的swing皮膚能在eclipse的jigloo編輯器上跑了
- hibernate高手进来
- 请教高手怎样实现 MzTreeView2.0 添加,删除,修改??或相关树菜单的例子,谢谢
- java 读文件出错
- 请问我用了System.arraycopy,要import什么呀?
- 大侠们回忆下基础。顺便帮我解释下呵呵。
- 在JAVA程序中使用Domino 类的问题 ,急!!!
- 如何在JAVA中读取EXCEL文件?谢谢。
- 有没有java程序调用C程序来修改IP包的头部?(100分求解)
- swing组件上显示中文的问题
- 关于netbeans的winform程序的初级问题
- Java小游戏中关于显示背景图片的问题?
assert 关键字将这个错误吞了,然后后面的推论是错误的那为什么assert会吞掉这个异常呢?
你确定你开了断言么
java -ea 加class名儿试下
* @param args
*/ public static void main(String[] args) { Boolean b = false;
Object a = null;
Object c =10;
assert b= (a.equals(null));
System.out.println(b);//false 还是b的值没有改变
assert b = c.equals(10);
System.out.println(b);//false 还是b的值没有改变
b = c.equals(10);
System.out.println(b);//判断了c是否和10相等 改变了b的赋值
}
return (this == obj);
}Object 默认的 equals 实现是采用 == 运算符进行比较,也就是比较内存中所引用的地址是否相同。e.equals(null) 如果这个对象的 equals 没有实现的话就相当于 e == null 这段代码,因此不会抛出空指针异常。
这个问题没什么好追踪,默认assert是关闭的, 你写这代码时,JVM是默认没开断言支持,在assert处所有错误都忽略掉, 你可以在命令行上 java -ea 来执行程序,就会报错误了。