值类型和引用类型只是c#概念?

时间:2015-10-18 08:39:32

标签: c# c++ c

有人可以解释,值类型和引用类型只是c#.net概念,或者它适用于其他各种语言,如c,c ++,java。 谢谢

2 个答案:

答案 0 :(得分:2)

在Java中,引用Does Java make distinction between value type and reference type

  

在Java中,所有对象和枚举都是引用类型,所有基元都是值类型。两者之间的区别与C#中的复制语义相同,但您无法在Java中定义新的值类型。

在C和C ++中,没有值类型和引用类型的概念。 C ++有引用,但这与引用类型不同。

答案 1 :(得分:1)

它适用于许多编程语言。

通常,值类型可以存储在堆栈(see this Eric Lippert's article for C# details)和堆中的引用类型中。或者,至少,值类型是在将它们分配给新变量或作为参数传递给方法时创建自身副本的类型。

例如:

// In C# a struct is a value type
public struct A 
{
    public string Text;

    public A(string text) 
    {
        Text = text;
    }
}

A a = new A("hello world");

// This creates a copy, instead of assigning the same "object" to a new reference
A a1 = a; 

查看Wikipedia说的内容:

  

一些编程语言 - 特别是C#,D和Swift--使用这个术语   value类型,用于引用赋值所具有的对象类型   深度复制语义(与具有浅

的引用类型相对)

还说:

  

其他编程语言 - 例如,Java-没有正式定义该术语   价值类型,但他们的从业者非正式地使用该术语来指代   具有深拷贝语义的类型(例如Java的原始类型)。   复制语义

另一个有趣的Q& A可以是stack and heap in V8 ( JavaScript)