乐趣区

关于java:关于我在面试时写不出String的equals方法反思

起因

往年 4 月找工作的时候,面试官给了我一支笔,叫我写一下 String 的 equals 办法,刚拿到笔的时候,我还感觉挺简略的,开始动笔之后,不会写,贼难堪。

过后我写的思路

其实对于 equals 怎么写,那时候我还是有思路的,我先在纸上写下了 euqals 的个性

  1. 自反性:x.equals(x) == true
  2. 对称性: x.equals(y) == y.equals(x)
  3. 传递性:x.equals(y) == y.equals(z) == true 那么 x.equals(z) == true
  4. 一致性:x.equals(y) == x.equals(y)

之后我也写了实现的步骤

  1. 判断援用是否是同一个对象
  2. 判断传入是否为 null
  3. 判断传入是否是同一个类型
  4. 对象转化
  5. 对须要比照的域进行比照
@Override
    public boolean equals(Object o) {
        // 援用是否同一个
        if (this == o) {return true;}
        if (o == null || this.getClass() != o.getClass()) {return false;}
        String string = (String) o;
    }

这是我面试的时候,写的代码,只写到了类型转化之后。转完之后我就蒙了,string 的外部实现是什么?string 是用什么保留字符串的?这些我都没有印象。前面面试官揭示我是用 char 数组存储的字符串。晓得之后我还是没能写进去,我不晓得一个 String 对象要如何能力获取到 char 数组。

String 外部实现



回来后看了 String 的源码,String 外部应用 char 数组存储字符串,外部比拟的时候,应用对象.value 间接获取 char 数组。

总结

第一:我不晓得 String 的外部实现
第二:实质是,开发过程始终应用的 Lombok,素来没写过 equals 办法。在加上,面向对象编程,造成了固有思维,感觉获取一个对象的属性,必须应用 get 办法,批改属性必须应用 set 办法。没有思考到,equals 办法在对象外部,只管属性应用的是 private 润饰,照样能够应用对象.value 办法间接获取。

退出移动版