We know that all our enum types are converted into classes which inherit java.lang.Enum.
There are many methods defined in java.lang.Enum,
| public final int ordinal() |
|---|
| returns the position of the enum constant in the enum list. The position is also called the ordinal value of the enum constant and it starts with 0. |
Another method which returns the name of the enum constant, exactly as declared in its enum declaration is name().
| public final String name() |
|---|
| The toString() method uses this name() method to print the name of the constant. |
Hence all the below methods are equivalent,
System.out.println(enumVariable);
System.out.println(enumVariable.name());
System.out.println(enumVariable.toString());
package com.ibytecode.enums;
public class PizzaEnumOrdinal {
enum PizzaSize {
SMALL, MEDIUM, LARGE
};
public static void main(String[] args) {
for(PizzaSize size : PizzaSize.values()) {
System.out.println(size.name() + ", Position: " +
size.ordinal());
}
}
}
SMALL, Position: 0
MEDIUM, Position: 1
LARGE, Position: 2
To compare two enum constants based on their ordinal values (position) we can use the compareTo() method of java.lang.Enum class. The method signature is as follows.
| public final int compareTo(enum-type e) |
|---|
| This method returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. |
package com.ibytecode.enums;
public class PizzaEnumCompareTo {
enum PizzaSize {
SMALL, MEDIUM, LARGE
};
public static void main(String[] args) {
PizzaSize s1 = PizzaSize.SMALL;
PizzaSize s2 = PizzaSize.MEDIUM;
PizzaSize s3 = PizzaSize.LARGE;
if(s1.compareTo(s2) < 0)
System.out.println(s1 + " is positioned before " + s2);
if(s3.compareTo(s2) > 0)
System.out.println(s3 + " is positioned after " + s2);
if(s1.compareTo(s3) < 0)
System.out.println(s1 + " is positioned before " + s3);
}
}
SMALL is positioned before MEDIUM
LARGE is positioned after MEDIUM
SMALL is positioned before LARGE
