C#修改引用类型对象不反映更改

时间:2017-10-28 06:06:59

标签: c# object types reference

我有这个C#代码:

int i = 20;

object t = i;

object r = t;

r = 100;

为什么在这一点上,T的值仍然是20而不是100?

我认为T和R指向相同的位置并且对它们中的任何一个的改变应该相互影响......

我无法真正理解堆中的引用类型是如何工作的,请帮助我

2 个答案:

答案 0 :(得分:3)

  

为什么在这一点上,T的值仍然是20而不是100?

因为您没有修改List<Author>author=authorDao.getauthor(); thModel.addAttribute("author", author); return "results";

您需要查找"boxing"。但是,代码中发生的事情是t中存储的值20被“装箱”,这意味着分配了一个新的引用类型对象,并将值i复制到该对象中对象

分配20时,将该框内值的引用复制到r = t。到目前为止,非常好。

但是,当您指定t时,您修改了盒装值。原始的盒装值保持不变,但现在仅由r = 100;引用。

赋值t创建一个全新的盒装值,在堆上分配,并将对该对象的引用复制到变量r = 100中。这对r没有任何影响,t仍然设置为20的第一个盒装值的引用。

答案 1 :(得分:0)

当您将整数值 @SuppressWarnings("deprecation") @BeforeClass public void setUp(ITestContext context) { System.out.println(context.getCurrentXmlTest().getParameters()); } 设置为对象i时,会发生装箱并将一个框内的整数值放入Heap。

当您将t设置为t时,他们会在堆上指向相同的参考地址。但是当您使用新的整数值设置r = t之类的r时,会发生新的装箱,r = 100将指向不同的地址。

首先,拳击和拆箱是非常昂贵的事情。你为什么要设置整数到对象?

如果要将整数传递给某个方法并获得更改的值,可以在方法参数中使用r关键字。

您可以在下面找到示例代码:

ref