Strings vs classes when both are reference types

后端 未结 4 2045
北荒
北荒 2021-02-02 00:07

Here is how my last interview went:

Question: Where are strings stored?

Answer: Heap since it is a reference type

相关标签:
4条回答
  • 2021-02-02 00:48

    Strings share buffer. In your case if one and two were strings, they would be separate objects (two objects on the heap), but internally they would point to the same buffer (third object on the heap).

    0 讨论(0)
  • 2021-02-02 01:00

    Strings are immutable because logically, they are a single value, and being mutable would lead to a lot of unexpected behavior.

    However, strings are not value types, because they tend to be passed around a lot, which would require a lot of copying of values. This would become quite expensive, especially for large strings.

    So in order to get the best of both worlds, strings in .Net are reference types, but also immutable.

    0 讨论(0)
  • 2021-02-02 01:01

    The command one = ... sets the *pointer named one to a new value. Since two is a different pointer, it retains it's original value.

    The command one.someString = ... modifies the object referred by one. two is still a different pointer, but since it points to the same object, the modifications are shared between them.

    0 讨论(0)
  • 2021-02-02 01:04

    One of reasons strings were made immutable, even though they are reference types, was to make them look and behave like primitive types (e.g., int, double, float).

    That's also the reason why strings are the only reference type that can be represented as a literal (e.g., "some string"). Lots of other languages take the same approach, like Java for example.

    0 讨论(0)
提交回复
热议问题