ignoring primitives for now...
variable are like address
cards. They hold the address to a house or building. If you pass a variable into a method, you can think of it as making a copy of the address card and handing that to the method. If you erase that 2nd card's contents, the first card still has its copy, and nothing changes on the actual building.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors