I was trying to explore Java Generics and when I tried below code, I was expecting, line 3 will compile fine, but line 4 will show compilation error.
1| PriorityQueue queue1 = null;
2| PriorityQueue<Integer> queue2 = null;
3| queue1 = queue2;
4| queue2 = queue1;
However to my surprise, line 4 is compiling fine. I am cunfused at this point, why this is allowed. Because queue2 is allowed to hold only Integer. So is it okay to assign queue1 as it can hold value of any type? Considering a code written before java 5.0, I can understand line 3, not line 4.
1| PriorityQueue<?> queue1 = null;
2| PriorityQueue<Integer> queue2 = null;
3| queue1 = queue2;
4| queue2 = queue1;
For above code, I am getting expected result, which is, getting compilation error for line 4.
Can someone please explain the above behavior?