As to .NET, string is a reference class thoroughly mimicking value semantic. It's storage is quite non-trivial, based on the idea of
interning.
Please see recent answers on related topic, including mine, here:
string is a reference type or value type[
^].
—SA