Reference type

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In programming language theory, a reference type is a data type that refers to an object in memory. A pointer type on the other hand refers to a memory address. Reference types can be thought of as pointers that are implicitly dereferenced.[1] The objects being referred to are dynamically allocated on the heap whereas value types are allocated automatically on the stack. In languages supporting garbage collection the objects being referred to are destroyed automatically after they become unreachable.

When a reference type variable refers to an immutable object it behaves with the same semantics as a primitive value type. The fact that the object being referred to cannot be modified by any of the references to it means the only way to change the value of the reference variable is through assignment. The use of the Number classes in the Java programming language is an example of this behavior.[2]

Language and platform support[edit]

  • The .NET Framework makes a clear distinction between value and reference types, and allows creation of user-defined types for both kinds.
    • In C# and D, the struct keyword defines a value type, while the class keyword defines a reference type.
    • In C++/CLI, the keyword pairs value class and value struct define managed value types, while the ref class and ref struct pairs define managed reference types.
  • On the Java platform, all composite and user-defined types are reference types. Only primitive types are value types.
  • Standard ML, OCaml, and F# have a type called ref (reference); it implements a simple mutable cell, although its widespread use is generally discouraged in favor of a more purely functional style.
  • Windows COM objects are reference-counted reference types.
  • In many scripting languages, including Python and Ruby, all types are reference types, including those that appear as primitive types.


  1. ^ Robert Sebesta. Concepts Of Programming Languages, Tenth Edition, Pearson, 2012, p. 296
  2. ^