前言:
其实,写过几篇博客之后,还是有一点感触的:刻意地去写一篇系统性的博客往往会因为惰性而最后不了了之,而且后期也基本上不会再回头来看这些博客,而以日记周记的形式写短篇博客,反而能坚持下去。所以,特意立一篇关于Java小技巧的博客,后期持续更新~~~
正文:
技巧1:在代码中,为什么会推荐if(null==user.getId()),而不是if(user.getId()==null)?
答曰:两者的效果一样,而且都不可避免空指针,但是前者如果不小心把“==”写成赋值符号,编译失败;后者出现类似情况的时候,编译成功。因此前者更利用排查错误。
注意:后期有Oscer反馈,其实user.getId()=null一样会编译错误。(这里,博主插一句:其实关于“if里面null==user.getId()和user.getId()==null的区别”这个问题,博主很早就有疑问了,但是一直没有去关注。直到写这篇博客之前,博主的好友对这个问题进行了探讨得出此结论,但是博主没有经过实践就发布,是很不严谨的!)在Java中,if(user.getId()=null)是编译失败的;但是在C/C++中,if(user.getId()=null)是编译成功的。也就是说,if(null==user.getId())这种写法极有可能是C/C++程序员将习惯带到Java中的。if(null==user.getId())和if(user.getId()==null)两种写法本身没有优劣之分。
然而:还是有以下三种情况需要特别注意(虽然这样写代码的情况很少见),这三种情况是可以编译成功的,但是要注意这三种情况中要将null强转为Boolean类型。
第一种:如果属性是boolean类型,而且用boolean类型的getter方法
private boolean testFirst;
boolean testFirst = quotationPublicParamDTO.isTestFirst();
if (testFirst = (Boolean) null) {
return null;
}
第二种:如果属性是Boolean类型,而且用Boolean类型的getter方法
private Boolean testSecond;
Boolean testSecond = quotationPublicParamDTO.getTestSecond();
if (testSecond = (Boolean) null) {
return null;
}
第三种:如果属性是Object类型,而且用Object类型的getter方法,但是判断之前,要将Object类型强转为boolean类型
private Object testThird;
boolean testThird = (boolean) quotationPublicParamDTO.getTestThird();
if (testThird = (Boolean) null) {
return null;
}
技巧2:如何建组合索引?
答曰:ALTER TABLE test ADD INDEX `idx_aaa_bbb_ccc` (`aaa`, `bbb`, `ccc`)
技巧3:
答曰: