Skip to content

Commit 9165696

Browse files
committed
优化“比较java枚举成员使用equal还是==”
1 parent fc646ed commit 9165696

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

contents/comparing-java-enum-members-or-equals.md

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
## 比较java枚举成员使用equal还是==
22

33
### 问题
4-
我知道Java枚举会被编译成私有构造参数和一堆静态方法的一个类,当去比较两个枚举的时候,总是使用equals()方法,例如:
4+
我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类,当去比较两个枚举的时候,总是使用equals()方法,例如:
55
```java
66
public useEnums(SomeEnum a)
77
{
@@ -23,12 +23,12 @@ public useEnums2(SomeEnum a)
2323
...
2424
}
2525
```
26-
我已经Java编程5年以上了,并且我想我也懂得 == 和 equals() 之间的区别,但是我仍然觉得困扰在这个问题上,哪一个操作符才是我该使用的。
26+
我有5年以上的java编程经验,并且我想我也懂得 == 和 equals() 之间的区别,但是我仍然觉得很困惑,哪一个操作符才是我该使用的。
2727

2828
### 答案
2929

3030
二者皆对,如果你看过枚举的源码,你会发现在源码中,equals也仅仅非常简单的 == 。
31-
我使用 == ,无论如何,这个左值是可以为 null的
31+
我使用 == ,因为无论如何,这个左值是可以为 null的
3232

3333

3434
译者补充 java.lang.Enum 中Equals 代码:
@@ -40,8 +40,8 @@ public final boolean equals(Object other) {
4040

4141

4242
### 额外答案
43-
#### 能使用 == 在枚举判断中
44-
答案是肯定的,因为枚举有着严格的实例化控制,所以你可以用 == 去比较实力,这在语言标准内也是有保证的
43+
#### 能在枚举中使用 == 进行判断
44+
答案是肯定的,因为枚举有着严格的实例化控制,所以你可以用 == 去做比较符,这个用法,在官方文档中也有明确的说明
4545

4646
>JLS 8.9 Enums
4747
>An enum type has no instances other than those defined by its enum constants.
@@ -80,4 +80,6 @@ Bloch specifically mentions that immutable classes that have proper control over
8080
1. 能正常工作
8181
2. 更快
8282
3. 运行时是安全的
83-
4. 编译期也是安全的
83+
4. 编译期也是安全的
84+
85+
stackoverlfow链接:http://stackoverflow.com/questions/1750435/comparing-java-enum-members-or-equals

0 commit comments

Comments
 (0)