首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"Classname instancename=value“是否与”Classname instancename=new Classname () ;instancename=value“相同?

"Classname instancename=value“是否与”Classname instancename=new Classname () ;instancename=value“相同?
EN

Stack Overflow用户
提问于 2018-05-16 07:27:52
回答 2查看 27关注 0票数 0
代码语言:javascript
复制
TestClass p=new Testclass();
p=value;

TestClass p=value;

我运行了一些测试,它们看起来是相同的,但我想确定第二个没有“新”关键字的问题。

很抱歉有新手的问题,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-16 07:32:32

当你在下面

代码语言:javascript
复制
1.TestClass p=new Testclass(); //this will create new p 

2. var value = new Testclass();
TestClass p=value;//this will assign already created instance to p i.e. reference assignment

首先,将其全部创建为新对象,但在第二种情况下,当您赋值引用时,值和p都指向相同的实例,因此如果您确实进行了如下更改

代码语言:javascript
复制
value.property = 'abc';//it affect p
p.property = 'xyz';// it affect value

这是因为两者都指向同一个对象。

票数 2
EN

Stack Overflow用户

发布于 2018-05-16 07:56:39

很明显,你没有做足够的测试,因为这有一个关键的区别。如果你有:

代码语言:javascript
复制
var value1 = new TestClass();
var value2 = new testClass();

value1.Foo = "Bar";
value2.Foo = "Baz";

Console.WriteLine($"Val 1: {value1.Foo}, Val 2: {value2.Foo}");

您将像预期的那样得到"Val 1: Bar, Val 2: Baz",但是如果您得到了:

代码语言:javascript
复制
var value1 = new TestClass();
TestClass value2 = value1;

// ...The rest as before

你得到了:"Val 1: Baz, Val 2: Baz"

之所以发生这种情况,是因为value2实际上指向与value1相同的对象。这可以是将两个人的地址提供给某个节点上的一个真实位置,每当他们需要该地址时,他们都会引用该地址。

在编程中,这是变量的地址或引用,即存储在内存中的变量。当他们有相同的地址时,不管你做什么变量,都会影响到另一个人,就像一个人画了一个人所指的房子,另一个人会看到这些变化。

然而,为了让事情变得更棘手:

代码语言:javascript
复制
var value1 = new TestClass();
var value3 = new TestClass();
TestClass value2 = value1;   // Value2 is now sharing the reference of value1
                             // Any changes to value2 will effect value1
value2 = null;               // This does not set the value of value1 to null
value2 = value3;             // This does not set the value of value1 to value3

回到类比中,当我们将一个引用类型变量赋值给另一个引用类型变量时,我们会给一个人一个新的节点,上面有一个不同的地址。显然,这不会改变原来的位置,无论是在新的地点是什么。

在编程中,我们只是告诉它现在要引用什么对象。如果您确实想要value2 = null的行为使value1 null也一样,那么仍然有一种方法可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50364761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档