• Java编码规范--OOP规约


            本文只整理个人觉得需要注意的地方,其他常识性的问题就暂时不整理了。

    1.所有复写方法,必须加@Override注解。

            说明:getObject()和get0bject()的问题,一个是大写字母O,一个是数字0,加上@Override可以准确的判断能否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

            这里的签名不是对接接口时候使用的加密算法生成的字符串,而是指的是方法名、入参、返回值这三项。

    2.Object的equals方法容易抛空指针异常,应当使用常量或有确定值的对象来调用equals方法

    1. //正例
    2. "test".equals(object);
    3. //反例
    4. object.equals("test");

            说明:推荐使用JDK7引入的工具类 java.util.Objects#equals(Object a,Object b)方法进行比较。

    3.所有整型包装类对象之间的比较,全部使用equals方法进行比较。

            拓展:为啥呢??我们来看个例子。

    1. int i= 1;
    2. int j = 1;
    3. System.out.println(i==j);
    4. int k = 128;
    5. int l = 128;
    6. System.out.println(k==l);
    7. Integer a = 1;
    8. Integer b = 1;
    9. System.out.println(a==b);
    10. Integer c = 128;
    11. Integer d = 128;
    12. System.out.println(c==d);
    13. System.out.println(Objects.equals(c,d));

    思考一下,上述的打印结果会是什么?全是true吗?

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    公布答案:

     为什么会是这样呢?

            双等号“==”对于基本类型来说,都是比较的值,非基本类型都是比较的对象的地址,这里 int是基本类型,Integer是int的包装类,也就是非基本类型,比较的是地址。

            第一个和第二个是true不必多说。

            既然是比较的地址,为什么三个和第四个 就有差异?

            这要涉及到Integer的源码。

            Integer在加载的时候,有一个静态块,会初始化-128~127之间的int值到一个缓存数组中,当使用Integer定义这之间的值的时候,会直接返回数组中对应的值,地址相同,所以第三个比较为true;当用户定义超出这个范围的值的时候,会直接new Integer(对应的值),返回的是不同的地址,所以第四个比较为false。

     

            静态块:

            赋值方法:

     好了 继续。

    4.构造方法里面禁止加入任何业务逻辑,如果有需要初始化逻辑,请放在init方法里面。

  • 相关阅读:
    计算机网络第三章——数据链路层(中)
    代码随想录leetcode200题之图论
    Linux/Ubuntu/Arm设备中通过/proc/stat等文件计算Cpu使用率
    zabbix监控
    图解字符串匹配算法:从Brute-Force到KMP,一下子就整明白了
    计算机毕业设计Java广西科技大学第一附属医院陪护椅管理(源码+系统+mysql数据库+Lw文档)
    目标检测2——借Detectron2源码理解Anchors与RPN
    Jenkins 如何玩转接口自动化测试?
    线程和进程的优缺点
    iNeuOS工业互联网操作系统,三维(3D)模型在线编辑应用和实时数据统计(和值、均值、众数、方差、中位数等)
  • 原文地址:https://blog.csdn.net/m0_38084879/article/details/125621945