我是把枚举当作常量来使用的,枚举中还有两个自己的属性,关注到这个地方的朋友对枚举已经有了认识,这里就不再编写枚举的demo了,这里我直接说结果吧,在枚举中使用==和equals比较效果是一样的,查看源码可以知道枚举的equals方法还是通过==来比较的
1 2 3 | public final boolean equals(Object other) { return this ==other; } |
在java中,==比较的是内存地址(也可以说是对象的引用),equals比较的值,这两个区别在String中最明显了,因为String中重写了Object的equals方法,源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public boolean equals(Object anObject) { if ( this == anObject) { return true ; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0 ) { if (v1[i++] != v2[j++]) return false ; } return true ; } } return false ; } |
还有一些对象也重写了equals方法,比如Integer,这些在开发中很少会去详细的研究,但是至少我们要知道,到用的时候要保证不出问题。