To understand why some changes are visible across methods and others are not, you need to know where data lives. Local variables and references sit on each thread's stack, while every object created with new lives on the shared heap. This model explains pass by value, StackOverflowError from deep recursion and OutOfMemoryError from too many objects. It is a frequent interview question and the base for garbage collection.