对null和equals有必要了解一点东西(编码规范)
2018-01-03 17:03
288 查看
null == o 和 o == null 的区别
运行结果:
o == null
null == o
两段代码的效果是一样的,那为什么编程规范里要把null提前呢?
假如你少写了个等号,写成a = null是不会报错的,但是null = o,会报错,所以习惯写null == o更好
“abc”.equals(str) 和 str.equals(“abc”) 的区别
运行结果:
true
true
字符串放在equals前面和后面看似没有区别,但是它隐藏了一个巨大的隐患。看以下代码:
运行结果:
false
Exception in thread “main” java.lang.NullPointerException
at com.yhc2.Main02.main(Main.java:8)
我们可以发现字符串放在前面的正常运行,字符串放在后面的出现了空指针异常,那是因为放在后面要有一个前提,就是字符串不能为空,而放在前面非常巧妙的避免这个问题,而且逻辑上一个字符串确实不equals一个null值,所以返回false。
总结:常量放在左边是基本素养
public class Main { public static void main(String[] args) { Object o = null; if (o == null) { System.out.println("o == null"); } if (null == o) { System.out.println("null == o"); } } }
运行结果:
o == null
null == o
两段代码的效果是一样的,那为什么编程规范里要把null提前呢?
假如你少写了个等号,写成a = null是不会报错的,但是null = o,会报错,所以习惯写null == o更好
“abc”.equals(str) 和 str.equals(“abc”) 的区别
public class Main { public static void main(String[] args) { String str = "abc"; System.out.println(str.equals("abc")); System.out.println("abc".equals(str)); } }
运行结果:
true
true
字符串放在equals前面和后面看似没有区别,但是它隐藏了一个巨大的隐患。看以下代码:
public class Main { public static void main(String[] args) { String str = null; System.out.println("abc".equals(str)); System.out.println(str.equals("abc")); } }
运行结果:
false
Exception in thread “main” java.lang.NullPointerException
at com.yhc2.Main02.main(Main.java:8)
我们可以发现字符串放在前面的正常运行,字符串放在后面的出现了空指针异常,那是因为放在后面要有一个前提,就是字符串不能为空,而放在前面非常巧妙的避免这个问题,而且逻辑上一个字符串确实不equals一个null值,所以返回false。
总结:常量放在左边是基本素养
相关文章推荐
- 关于编码规范的一点心得体会
- 对计算机编码的一点了解
- 全面了解Head区规范编码
- 一点编码规范心得
- Android 编码规范:(九)覆盖equals时总要覆盖hashCode
- Android 编码规范:(八)覆盖equals时请遵守通用约定
- c++11编码规范 NULL还是nullptr
- 为何Java规范中建议,重写equals很有必要重写hashCode
- 找实习之前看了些东西,觉得有必要了解的。
- 给大家一点编码规范。希望有帮忙
- 一看就懂的RSA公钥私钥加密解密,BASE64编码,针对于没了解过RSA的同学,很有帮助。
- 总结的编码规范
- 深入了解Java中“==”与“equals”的区别
- 转载:C#编码规范
- Python开发编码规范
- 如何快速的了解一个东西
- php编码规范
- 测试不同编码的string中文 equals结果
- 程序的书写规则(程序的编码规范)