Static inner classes do not hold a reference to their containing object instance while non-static ones do. I personally prefer to define inner static classes if no instance referencing is needed; it makes refactoring a hell a lot easier. Look at the following example if something in your head is whispering what the hell:
class SomeA {
private int a;
class SomeB {
void xyz() {
int something_different = SomeA.this.a; // Right here! Static classes won't have access to this.
}
}
}