Nein, das stimmt so nicht.
Auf dem Heap liegt dann soetwas:
[CODE=C]struct CharArray {
int size;
char* first;
}[/CODE]
In der Variable feldChar (auf dem Stack) liegt dann ein Pointer auf dieses Datenstruktur (auf dem Heap). Ich kenne da die genauen Verhältnisse nicht; aber von der Semantik her ist es genau das.
EDIT:
Mit Strings verhält es sich nochmal anders:
Schreibst du in Java
[CODE=JAVA]String s = "foo";[/CODE]
Dann wird eine neue* Instanz hiervon auf den Heap gelegt:
[CODE=C++]struct String {
CharArray* chars;
// .. womöglich weitere Daten, weiss ich nicht ...
}[/CODE]
In der Stack-Variable s ist dann ein Pointer auf diese Datenstrukur im Heap.
---
* Die JVM versucht zu erreichen, dass jeder String nur einmal im Heap liegt. Das klappt nicht immer, aber in c.a. 80% der Fälle. Wenn du einen String anlegst schaut die JVM also erstmal in den Heap. Wenn da schon ein String liegt der identisch zu dem neuen ist, wird einfach der existierende referenziert.
Strings sind in Java immutable. Ein String kann nicht verändert werden, wenn er einmal angelegt wurde. Alle String-Manipulationen haben eine neue String Instanz zur folge (oder eine Referenz auf einen bestehenden, identischen).