首页 > Java > java教程 > 正文

"aa".equals(a)这种写法为什么就可以避免空指针。

高洛峰
发布: 2016-12-16 10:20:28
原创
1792人浏览过

public static void main(String[] args) {

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

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

之前对这个问题,在公司上班的时候,听到别人说这样的写法是为了避免空指针。的确我验证了一下,是可以避免空指针。后来想深究上面的我提出的问题时候,老同事告诉,这也是形成了一种编程规范。今天想想规范,也有一定的理由。

今天在我们的技术交流群里面有出现了这个问题,有引发了我的深思。

于是发了个帖子,

看了一下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为空的时候,就不会出现空指针异常吗 ? 
后来经过一番讨论后,我得出的结论是这样的。

讯飞智作-讯飞配音
讯飞智作-讯飞配音

讯飞智作是一款集AI配音、虚拟人视频生成、PPT生成视频、虚拟人定制等多功能的AI音视频生产平台。已广泛应用于媒体、教育、短视频等领域。

讯飞智作-讯飞配音 67
查看详情 讯飞智作-讯飞配音

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

所以系统报出了,空指针异常。

所以说,呼应文章的标题,这样还真的是避免了控制针异常。毕竟“aaa”这样的形式,不是null形式,是可以调用方法的。接着我们在按String类里面的equals方法做比较就OK的啦。

更多"aa".equals(a)这种写法为什么就可以避免空指针。相关文章请关注PHP中文网!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号