我有这个C#代码:
int i = 20;
object t = i;
object r = t;
r = 100;
为什么在这一点上,T的值仍然是20而不是100?
我认为T和R指向相同的位置并且对它们中的任何一个的改变应该相互影响......
我无法真正理解堆中的引用类型是如何工作的,请帮助我
答案 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