File tree 1 file changed +8
-6
lines changed
1 file changed +8
-6
lines changed Original file line number Diff line number Diff line change 1
1
## 比较java枚举成员使用equal还是==
2
2
3
3
### 问题
4
- 我知道Java枚举会被编译成私有构造参数和一堆静态方法的一个类 ,当去比较两个枚举的时候,总是使用equals()方法,例如:
4
+ 我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类 ,当去比较两个枚举的时候,总是使用equals()方法,例如:
5
5
``` java
6
6
public useEnums(SomeEnum a)
7
7
{
@@ -23,12 +23,12 @@ public useEnums2(SomeEnum a)
23
23
...
24
24
}
25
25
```
26
- 我已经Java编程5年以上了 ,并且我想我也懂得 == 和 equals() 之间的区别,但是我仍然觉得困扰在这个问题上 ,哪一个操作符才是我该使用的。
26
+ 我有5年以上的java编程经验 ,并且我想我也懂得 == 和 equals() 之间的区别,但是我仍然觉得很困惑 ,哪一个操作符才是我该使用的。
27
27
28
28
### 答案
29
29
30
30
二者皆对,如果你看过枚举的源码,你会发现在源码中,equals也仅仅非常简单的 == 。
31
- 我使用 == ,无论如何 ,这个左值是可以为 null的
31
+ 我使用 == ,因为无论如何 ,这个左值是可以为 null的
32
32
33
33
34
34
译者补充 java.lang.Enum 中Equals 代码:
@@ -40,8 +40,8 @@ public final boolean equals(Object other) {
40
40
41
41
42
42
### 额外答案
43
- #### 能使用 == 在枚举判断中 ?
44
- 答案是肯定的,因为枚举有着严格的实例化控制,所以你可以用 == 去比较实力,这在语言标准内也是有保证的 。
43
+ #### 能在枚举中使用 == 进行判断 ?
44
+ 答案是肯定的,因为枚举有着严格的实例化控制,所以你可以用 == 去做比较符,这个用法,在官方文档中也有明确的说明 。
45
45
46
46
> JLS 8.9 Enums
47
47
> 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
80
80
1 . 能正常工作
81
81
2 . 更快
82
82
3 . 运行时是安全的
83
- 4 . 编译期也是安全的
83
+ 4 . 编译期也是安全的
84
+
85
+ stackoverlfow链接:http://stackoverflow.com/questions/1750435/comparing-java-enum-members-or-equals
You can’t perform that action at this time.
0 commit comments