==到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals(),并修复了该错误.
是==坏?什么时候应该不应该使用它?有什么不同?
我在博客上看到它建议以下是使用getCode(int)Java枚举进行"反向查找"的合理方法:
public enum Status {
WAITING(0),
READY(1),
SKIPPED(-1),
COMPLETED(5);
private static final Map<Integer,Status> lookup
= new HashMap<Integer,Status>();
static {
for(Status s : EnumSet.allOf(Status.class))
lookup.put(s.getCode(), s);
}
private int code;
private Status(int code) {
this.code = code;
}
public int getCode() { return code; }
public static Status get(int code) {
return lookup.get(code);
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,静态地图和静态初始化程序看起来都是个坏主意,我的第一个想法就是将查询编码为:
public enum Status {
WAITING(0),
READY(1),
SKIPPED(-1),
COMPLETED(5);
private int code;
private Status(int code) {
this.code = code;
} …Run Code Online (Sandbox Code Playgroud) 这似乎是一个常见问题,但建议框中的任何项目都没有准确解释我想知道的内容。在此链接中,每个人都建议使用枚举类型(我现在已经研究过,但之前从未使用过)。我打算建议简单地使用 HashMap 并阅读答案,看看 Enum (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)实际上是否是更好的答案。根据 oracle 上的链接,“只要需要表示一组固定的常量,就应该使用枚举类型。” 所以,确实如此。
我的问题是...为什么?是不是更像是签订了一份不会改变的契约?这是获得某些类功能的更短的方法吗?表现如何?为什么这与仅仅在同一个类中定义常量有什么不同?
谢谢你!