装箱与拆箱

2024-01-28

我最近遇到的另一个 C# 面试问题是我是否知道装箱和拆箱是什么。 我解释过值类型位于堆栈上,引用类型位于堆上。 当一个值被转换为引用类型时,我们称之为装箱,反之亦然。

然后他让我计算一下:

int i = 20;
object j = i;
j = 50;

What is i?

我把它搞砸了,说是 50,实际上是 20。现在我想明白为什么了,但是当我玩不同的组合时,我惊讶地发现:

Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing

我期待看到b == 2也是这样,但事实并非如此,为什么呢?是不是因为第二拳破坏了整个a堆上的对象?

因为如果我这样做,那就没问题了:

public class TT
{
    public int x;
}

TT t = new TT();
t.x = 1;
TT t2 = new TT();
t2.x = 2;
t = t2;
t.x = 3;

What is t2.x?应该是3,确实如此。但这根本不是装箱/拆箱的示例,这是正确的吗?那么你会如何总结这一点呢?

在装箱/拆箱转换中,这些值是否会变得与上述相同?


很短:拳击的意思创建引用类型的新实例。如果您知道这一点,您就会明白创建另一个实例不会改变一个实例。

你正在做什么a = 2没有更改“框中”中的值,您正在创建引用类型的新实例。那么为什么还要改变其他事情呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

装箱与拆箱 的相关文章

  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • VLookup多列

    我正在使用 VLookup 函数来查找列中存在的多个值 这种方法效果很好 但需要花费很多时间 因为 Excel 工作表中有 100 000 行 有什么办法可以加快这段代码吗 该代码基本上查找列中的特定值并获取偏移量 简单 VLookup 与
  • 对于大于 32,767 的值,如何转换为“signed int”并返回“signed Short”?

    Code typedef signed short SIGNED SHORT 16 bit typedef signed int SIGNED INT 32 bit SIGNED SHORT x x SIGNED SHORT SIGNED
  • 如何获取快速 .Net Http 请求

    我需要一个可以在 Net 中使用的 Http 请求 该请求需要不到 100 毫秒 我能够在浏览器中实现这一点 所以我真的不明白为什么这在代码中是一个问题 我尝试过 WinHTTP 以及 WebRequest Create 它们都超过 500
  • Sails.js API Passport.js 身份验证

    我正在尝试在 Sails js 中开发 API 后端 我需要的最基本的事情是身份验证 就这样 我发现了sails generate auth生成器 我已按照以下列出的所有步骤进行操作帆生成验证 https github com kasper
  • 如何使用 g++ (Ubuntu) 编译 OpenAL 程序?

    我正在尝试找到一种让 OpenAL 在我的计算机上运行的方法 Ubuntu 12 10 running on 2010 intel i7 Macbook Pro 我从终端安装了 OpenAL 库 sudo apt get install l
  • 可视化将网络划分为社区的结果

    The dataset is included the network matrix and attribute data frame Network dataset has 3 data set itself that I just wa
  • 使用 free() 时“检测到堆损坏”

    我对 C 还很陌生 这实际上是我第一次使用指针进行作业 我无法弄清楚这个错误 这是我的代码 void str rv char c int i len str ln c char rev char calloc len sizeof char
  • sql server 中的行号,如 USER_SOURCE oracle 中的 LINE

    我试图找出更改一些存储过程代码的影响 在甲骨文中我曾经这样做过 select NAME TEXT LINE from USER SOURCE where upper TEXT like SEARCH STRING 在sql server中我
  • 动态图表生成/将对象从 JSF 1.2 传递到 Servlet

    我正在尝试使用 JFreeChart 库动态生成图表并将其显示给前端的用户 我的项目使用 JSF 1 2 作为其视图技术 我们正在尝试确定一种策略来显示BufferedImage 到目前为止 最好的选择似乎是使用 servlet 生成图表并
  • 如何检查emu8086中CF标志是否为1?

    我试图找出 CARRY 标志是否为 1 但我不知道如何检查它 我编写了下面的代码 但我需要一些帮助来处理我输入的问号 LEA DX MSG MOV AH 09H INT 21H MOV AH 01H INT 21H MOV NUM AL S
  • 在 php 中引用常量:“这是 MY_CONSTANT”

    我想在 PHP 中使用常量 但我也想将它像变量一样放在双引号内 这是可能吗 define TESTER World echo Hello TESTER 显然输出 你好 测试者 但我真正想要的是这样的 tester World echo He
  • SQL 动态透视 - 如何对列进行排序

    我正在对包含以下内容的表进行动态数据透视查询 OID 订单ID 尺寸 产品的尺寸 BucketNum 大小的顺序 应该去 数量 订购了多少 大小列包含不同的大小 具体取决于 OID 因此 使用找到的代码here http www sqlpr
  • AppDomain.Unload 不会释放我用反射加载的程序集[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 AppDomain Unload domain 之后删除插件程序集 https stackoverflow com questions 425077 how to delete the plu
  • 将 Ajax 数据获取到 Angular 网格中

    使用 Angular Grid 我在 console log 中获取 ajax 数据 但是一个空的网格 控制台日志显示 13 56 11 411 now 13 56 11 412 13 56 11 412 now 13 56 11 556
  • Maven 原型未出现在 m2eclipse Nexus 索引器中

    我正在 Eclipse 中设置一个用于 Java 开发的新工作站 在我以前的机器上 我不记得必须做任何特殊的事情才能看到 下的标准原型集合New gt Other gt Maven project gt select archetype 选
  • 如何修改Tkinter中的默认字体?

    我正在使用 Tkinter 在 Python2 7 中开发 GUI 但遇到了一个烦人的问题 我想定义所有小部件使用的默认字体 如果可能的话在一行中 此行仅修改 Entry 或 ComboBox 中使用的字体 root option add
  • Boost::GIL:读取具有 alpha 通道的 *.png 图像缺少抗锯齿功能

    我用的是boost 1 74 因此 毫无例外地捕获并休息我的实际代码如下所示 typedef std vector
  • 是否可以在 Google Apps 脚本中迭代 ENUM?

    我想在 Google Docs 的 Google Apps 脚本中获取所有可用的字体系列 FontFamilies 定义为 FontFamily ENUM 我可以迭代此 ENUM 以获取此文档中所有可能的 FontFamilies 吗 更新
  • 将默认值添加到 Laravel 表单中的选择列表::select

    简单的问题 我希望如此 我需要向我的选择列表 请选择 添加默认值 并将其设置为禁用
  • 装箱与拆箱

    我最近遇到的另一个 C 面试问题是我是否知道装箱和拆箱是什么 我解释过值类型位于堆栈上 引用类型位于堆上 当一个值被转换为引用类型时 我们称之为装箱 反之亦然 然后他让我计算一下 int i 20 object j i j 50 What