我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类.当比较给定枚举的两个成员时,我总是使用.equals(),例如
public useEnums(SomeEnum a)
{
if(a.equals(SomeEnum.SOME_ENUM_VALUE))
{
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我刚刚遇到一些使用equals运算符==而不是.equals()的代码:
public useEnums2(SomeEnum a)
{
if(a == SomeEnum.SOME_ENUM_VALUE)
{
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个运营商?
我已经读过可以Singleton使用以下方法在Java中实现Enum:
public enum MySingleton {
INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)
但是,上面的工作如何?具体而言,Object必须实例化.在这里,如何MySingleton被实例化?谁在做什么new MySingleton()?
什么是java枚举?他们是如何工作的?我在哪里可以使用它们以及如何?
我可以不在应用程序中使用枚举,或者它们是如此强大以至于使用它们比忽略它们更好吗?
据我所知,每个枚举类型的预定义常量只有一个实例.那是对的吗?现在,假设有一个名为valueenum 的实例变量,假设ONE是一个预定义的常量.如果value为(的)实例修改了,ONE则会影响所有引用的变量ONE.但是什么value时候垃圾收集器摆脱枚举的所有实例的价值呢?他们甚至被扔掉了吗?
例
下面是一个简单的例子,其中有两个变量A和B,既指ONE.在第一次使用value之前,该值被否定B.如果垃圾收集器已经摆脱了该ONE行之前的实例Number B = Number.ONE;,那么value我认为该值将被"重置"回到1.它是否正确?
枚举:
public enum Number
{
ONE(1), TWO(2), THREE(3);
int value;
Number(int value) { this.value = value; }
void negate() { value = -value; }
@Override
public String toString() { return "value: " + value; }
}
Run Code Online (Sandbox Code Playgroud)
主要方法:
public static void main(String[] args)
{
Number A …Run Code Online (Sandbox Code Playgroud)