What does the memory address of an object variable point to?
An object is just a chunk of memory. In a typical implementation of Java, that chunk is part of a larger range of memory known as the heap.
Exactly what makes up the structure of the object, its particular bits and bytes is of no concern to us regular Java programmers. How the structure of an object is laid out in memory is an implementation detail that does not concern us.
ie Car c1 = new Car("Chevy", "Tahoe");
Two steps involved here.
The right side of the assignment = instantiates the object. This means a chunk of memory in the heap is located. The values passed to the constructor are written into member fields in that memory.
The left side of the assignment = takes the location of that newly created object and assigns it to the variable named c1. If c1 is a local variable, it lives in the stack, in a typical implementation of Java.
In Java we never see the actual memory address. In code such as c1.model, we trust the JVM will find the c1 var on the stack, use its internally-maintained memory address to access the particular Car object, then navigate within that object's allocated chunk of memory to retrieve the value of the member field named model.

c1.