My newbie guess is that the pointer holds within it an address that points to another RAM location where the first field is stored, in this case an int. Then, in addition to the int being stored, there must be some kind of linker to where the next field is stored and so on.
I don't see how you could smash all the field data into one RAM latch. My theory is that the computer has some kind of default data structure that it employs to link field data together into a bundle that constitutes the object state.
LOL......How wrong am I?
Semi wrong.
First, drop the notion of Latch. You are using it incorrectly here (ram isn't latches).
I won't discuss how RAM actually works, but suffice it to say it isn't a simple latch, it is (currently typically for DRAM) a capacitor. How that is changed from capacitance to bytes is something you simply aren't ready for yet. But as always you can find a decent description of RAM structure here
http://en.wikipedia.org/wiki/Dynamic_random-access_memory .
Everything in your computer is stored in bytes. C and C++ are pretty good about telling you exactly how things will be stored in memory. An example of how it looks is something like this.
Lets say I have a object with two integer fields. The fields have the values of 4 and 5. In memory it looks (not exactly like, but close enough) something like this.
00040005
Notice that there is padding in front of the 4 and five. This is so you can later say "Hey, I really want that first value to be 309" at that point the memory representation would look like this
03090005
All of this information is stored at some place in memory. Memory address refer to where the object starts. When you ask "Hey, get me the second field" you compiler is doing the extra work to say "Ok, there are 2 fields, the first field is 4 digits big so the second field must start 4 digits from the start of the object".
That is the basics. But things get much more complex when talking about things like java. In java you have the references, but on the fly the locations they are pointing at may change at any moment. This is because Java is GCed. So, as a result, stuff can, and will, be shifted around in memory. This is part of the reason java doesn't really have the concept of a memory address or pointer, because java manages the memory.
Even the question "How big are objects" is somewhat complex and involved with Java because it isn't just storing off the fields of an object. It includes extra meta data on the objects to help with things like inheritance.
Even in C and C++ it isn't as straight forward as you might like. This is because of things like packing rules. What are those you might ask? Well. The simple case is the boolean. You might ask "How is a boolean stored" Well, to go back to my simple example above if that first field was a boolean set to true instead of an integer then the object might look like this in memory
00010005
What, you might ask? 4 digits assigned to 1 value! Crazy! Why would they do that?
The answer is simple, CPUs never work against 1 bit. In fact, they pretty rarely work against a byte. A CPU will work against (at a minimum) its word size, or the size of its general registers. It does this for performance reasons. It takes the same amount of time for a CPU to load up 64 bits as it takes it to load 1 bit. In fact, when talking to memory, the CPU generally can't load single bits out memory. It is only allowed to load things in chunks. This is done for performance reasons.
So how are objects stored in memory? Typically something like this
[Object metadata][field1][field2][fieldn]
Depending on the language, the Object metadata may or may not exist with the object data.