Эта статья участвует в "Месяце тем Java - Заметки по отладке Java", подробности см.Ссылка на мероприятие
Вопрос: Сравнение элементов перечисления Java: == или equals()?
Я знаю, что перечисления Java скомпилированы как классы с частными конструкторами и кучей общедоступных статических членов. Я всегда использовал .equals() при сравнении двух членов данного перечисления, например.
public useEnums(SomeEnum a)
{
if(a.equals(SomeEnum.SOME_ENUM_VALUE))
{
...
}
...
}
Однако я столкнулся с кодом, в котором используется оператор равенства == вместо .equals():
public useEnums2(SomeEnum a)
{
if(a == SomeEnum.SOME_ENUM_VALUE)
{
...
}
...
}
Какой оператор мне использовать?
Высокий балл ответа:
Может ли == использовать перечисление?
Да: перечисления имеют строгий контроль экземпляров, == можно использовать для сравнения экземпляров. Это спецификация языка
Статья переведена сАминь 2 несколько ярлыков соответственно 6 дорвей 75 колит стал 67 там-АС4 из 6, 2, 7, очевидно 2 ай-переполнение стека-ком.перевод.о боже/вопросы/1…
Предложение автора: можно сравнивать одно и то же значение перечисления, но нужно обратить внимание на разницу между == и equals
Поскольку многие студенты просили, я вставлю сюда код вложенного перечисления:Как получить значение перечисления из строкового значения в Java?
public enum SaasApiEnum {
/**
* 企业创建
*/
ORG_CREATE("企业创建", SaasApi.ORG_CREATE),
;
SaasApiEnum(String name, String api) {
this.name = name;
this.api = api;
}
/**
* 接口名
*/
private final String name;
/**
* 接口地址
*/
private final String api;
/**
* 枚举映射,快速解析用,key为枚举name()
*/
private static final Map<String, SaasApiEnum> MAPPINGS = new HashMap<>(64);
static {
for (SaasApiEnum anEnum : values()) {
MAPPINGS.put(anEnum.api, anEnum);
}
}
/**
* 解析给定的接口地址为当前枚举类型
*
* @param api 接口地址
* @return 对应的枚举,or null if not found
*/
public static SaasApiEnum resolve(String api) {
return (api != null ? MAPPINGS.get(api) : null);
}
public String getName() {
return name;
}
public String getApi() {
return api;
}
}
В перечислении мы можем задать свойства, если свойство Interger, то у нас могут возникнуть проблемы с использованием ==.
Правильный метод сравнения для Integer использует равенство.
Между [-128, 127] используйте символ == для сравнения значения Integer, которое равно
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
Это статический внутренний класс Integer.При загрузке класса Integer в память для его инициализации будет выполняться статический блок кода во внутреннем классе.Основная работа заключается в переносе числа между [-128, 127] в класса Integer и сохраните соответствующую ссылку в массиве кеша, чтобы в области методов было открыто пространство для хранения этих статических переменных Integer, а также статический массив кеша хранится здесь для использования потоком, который также называется статическим кеш. Мы знаем, что объекты в Java являются ссылками, поэтому при использовании Integer для объявления переменной инициализации он сначала определит, находится ли назначенный размер в диапазоне от -128 до 127. Если это так, используйте пространство в статическом кеше и верните соответствующий массив кеша. Соответствующая ссылка сохраняется в работающем стеке без повторного открытия памяти.
Integer a =127;
Integer b =127;
System.out.println(a==b); // true
a=128;
b=128;
System.out.println(a==b); // false
Часто используемый автор: equals.
Искренне благодарю красивых и красивых девушек за то, что смогли это увидеть.Если эта статья будет хорошо написана, если вы почувствуете, что есть что-то
Ставьте лайк 👍 Подписывайтесь ❤️ Делитесь 👥 Мне очень полезно с 8 пакетами пресса! ! !
Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится! ❤️❤️❤️❤️