Casting a primitive vs Creating a object of the primitive

Viewed 307

I'm not habitual to casting a primitive data type to an object. Saw some code like:

public static int CompareAges(Person p1, Person p2) {
    Integer age1 = p1.getAge();
    return age1.compareTo(p2.getAge());
}

The instantiation of age1 seemed extraneous, so I tried to write the code as:

public static int CompareAges(Person p1, Person p2) {
    return p1.getAge().compareTo(p2.getAge());
}

But that raised a compiler error because p1.getAge() is a primitive data type int and not an Integer, which is an object.

Intuitively, I did:

public static int CompareAges(Person p1, Person p2) {
    return ((Integer) p1.getAge()).compareTo(p2.getAge());
}

and it worked!

The question: What did I miss? Since when did we start casting primitives as value types?

3 Answers
Related