public static void main(String[] args) {

  String name=null;
if("aa".equals(name))//这种情形,不出现空指针异常
//if(a.equals("aa"))//出现空指针异常
{
System.out.println(true);
}
else { System.out.println(false); } }

上面的两句不同的比较语句测试,第一句不出现空指针异常,第二句出现。 所以在变量和常量比较的时候,一般把常量放在前面。为了避免空指针异常。但是我的问题是:变量在前时候,读到变量,变量为空,就出现异常了。 为什么变量在后时候,name变量就不用读了吗?既然要比较肯定也要读啊,问题只是先后的问题。为什么放在后面就就不报空指针呢?

看了一下string类的equals方法

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

但是我的问题又来了:源码我看了一下,也明白,但是在源码中如果anobject为空的时候,就不会出现空指针异常吗 ? 后来经过一番讨论后,我得出的结论是这样的:

问题是出现在调用方法上了。因为null值,并不是一个String对象。而你通过声明的String对象引用去 调用了String对象的实例方法。当然不可以了。null调用了方法。

所以系统报出了,空指针异常。所以说,呼应文章的标题,这样还真的是避免了控制针异常。毕竟“aaa”这样的形式,不是null形式,是可以调用方法的。

最新文章

  1. Concurrency
  2. CoordinatorLayout自定义Bahavior特效及其源码分析
  3. commons-fileupload实现文件上传下载
  4. [SHELL进阶] (转)最牛B的 Linux Shell 命令 (二)
  5. pandas.Panel数据
  6. Matlab计算两集合间的海明距离
  7. Redhat常见问题
  8. C语言的指针
  9. html中混入的特殊字符
  10. qq2013 java版(完整工程源码 包含服务端 oracle数据库)毕业设计有用
  11. 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
  12. (转)IOS笔记 #pragma mark的用法
  13. .net 读取实体属性和描述注释
  14. Spark Structured streaming框架(1)之基本使用
  15. 一步使你的asp.net网站在手机浏览器上全屏显示
  16. Visual Studio color schemes
  17. edu9E. Thief in a Shop
  18. java课程之团队开发冲刺1.3
  19. python:unittest之discover()方法批量执行用例
  20. c# 连等的写法都做了什么?

热门文章

  1. 定时清理mysql数据。
  2. Web应用开发工具及语言需要具备的功能探索
  3. JS控制文本框textarea输入字数限制
  4. Lock锁
  5. C#部分---利用arraylist集合做滚动抽奖;
  6. tomcat 启动时内存溢出
  7. leetcode 134. Gas Station ----- java
  8. C# WinForm获取当前路径汇总
  9. unity3d用鼠标拖动物体的一段代码
  10. Linux启动新进程的三种方法