Date is mutable, you're getting a reference to the date object and calling setTIme on it. So the thing you change is the thing that the Employee object is pointing at.
The salary is a primitive int, so when you access it with int j = staff[0].getSalary();
you're getting the primitive value and when you change j
it doesn't affect what the Employee has.