public class Person implements Comparable{
    String firstName;
    String lastName;

    public Person(String firstName, String lastName ) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    @Override
    public String toString() {
        return "Person [firstName=" + firstName +
                ", lastName=" + lastName + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result +
                ((firstName == null) ? 0 : firstName.hashCode());
        result = prime * result +
                ((lastName == null) ? 0 : lastName.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {return true;}
        if (obj == null) {return false;}
        if (getClass() != obj.getClass()) {return false;}

        Person other = (Person) obj;
        if (firstName == null) {
            if (other.firstName != null) {return false;}
        } else if (!firstName.equals(other.firstName)) {
            return false;
        }
        if (lastName == null) {
            if (other.lastName != null) {return false;}
        } else if (!lastName.equals(other.lastName)) {
            return false;
        }
        return true;
    }
    @Override
    public int compareTo(Object o) {
        if (o instanceof Person) {
            Person other = (Person) o;
            return lastName.compareTo(other.lastName);
        } else {
            return 0;
        }
    }
}

public class PersonEqualityDemo {
    public static void main(String[] args) {
        Person person1 = new Person("Stephen", "Cameron");
        Person person2 = new Person("Stephen", "Cameron");
        Person person3 = new Person("Angela", "Williams");
        //Invoking hashCode()
        int hashPerson1 = person1.hashCode();
        int hashPerson2 = person2.hashCode();
        System.out.println("hashCode() for person1 = " + hashPerson1);
        System.out.println("hashCode() for person2 = " + hashPerson2);
        //Comparing Objects
        System.out.println("Comparing Objects person1 and person2 = " + person1.equals(person2));
        System.out.println(person1);
        //Comparing Object last names
        System.out.println("person1 last name:" + person1.lastName);
        System.out.println("person1 last name:" + person1.lastName);
        int lNameComparison = person1.compareTo(person3);
        //boolean lNameBool = (boolean) person1.compareTo(person3);
        boolean bLastName = false;
        if(lNameComparison == 0) {
            bLastName = true;
        }
        System.out.println("Last Name comparison is: " + lNameComparison);
        System.out.println("Last Name comparison is: " + bLastName);
    }
}