Dart - 按 int 值传递但对列表引用?

2023-12-25

在 Dart 中,查看下面的代码,它是否对列表“按引用传递”,对整数“按值传递”?如果是这种情况,什么类型的数据将通过引用/值传递?如果不是这种情况,导致这种输出的问题是什么?

void main() {
  var foo = ['a','b'];
  var bar = foo;
  bar.add('c');
  print(aoo); // [a, b, c]
  print(bar); // [a, b, c]
  
  var a = 3;
  int b = a;
  b += 2;
  print(a); // 3
  print(b); // 5
}

您提出的问题可以通过查看值和引用类型之间的差异来回答。

像几乎所有其他编程语言一样,Dart 对两者进行了区分。这样做的原因是您将内存分为所谓的堆栈和堆。堆栈速度很快,但非常有限,因此它无法容纳那么多数据。 (顺便说一句,如果堆栈中存储了太多数据,您将收到堆栈溢出异常,这就是该站点名称的来源;))。另一方面,堆速度较慢,但​​可以容纳几乎无限的数据。

这就是为什么有值类型和引用类型。值类型是所有原始数据类型(在 Dart 中,所有写得很小的数据类型,例如int, bool, double等等)。它们的值足够小,可以直接存储在堆栈中。另一方面,您拥有可能更大的所有其他数据类型,因此它们无法存储在堆栈中。这就是为什么所有其他所谓的引用类型基本上都存储在堆中,而只有地址或引用存储在堆栈中。

所以当你设置引用类型时bar to foo你本质上只是复制存储地址bar to foo。因此,如果您更改存储在该引用下的数据,则似乎您更改了两个值,因为两者具有相同的引用。相反,当你说b = a您不传输参考值,而是传输实际值,因此如果您对原始值进行任何更改,它不会受到影响。

我真的希望我能帮助回答你的问题:)

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

Dart - 按 int 值传递但对列表引用? 的相关文章

随机推荐

  • 追加 Blob 数据

    是否有一个函数可以附加 blob 数据JavaScript我目前使用以下方法 var bb new Blob Hello world 2 type text plain bb new Blob bb another data type te
  • 将blur.js 与angularjs 一起使用

    我正在尝试在 div 上制作带有角度的模糊背景效果 如上图所示 为此我正在使用blur js http blurjs com 使用 jquery 一切都可以正常工作 但真正的问题是使用 angularjs 可以实现这一点 最好的方法是什么
  • WPF 复选框:检查更改的处理

    在 WPF 数据绑定中 我可以将 IsChecked 属性绑定到某些数据 例如用户设置 但我需要处理 CheckChanged 事件 我知道我可以单独处理Checked 未选中事件 但是当这个值改变时有什么方法可以得到通知吗
  • data.table:lapply 具有多列输出的函数

    我正在使用一个函数smean cl normal来自 Hmisc 包 它返回一个具有 3 个值的向量 均值以及 CI 下限和上限 当我在一个data table对于 2 个组 我获得 2 列和 6 行 有没有办法获得与 2 个组相对应的两行
  • 在 TensorFlow 中在 NHWC 和 NCHW 之间转换

    将张量从 NHWC 格式转换为 NCHW 格式 反之亦然 的最佳方法是什么 是否有专门执行此操作的操作 或者我需要使用拆分 连接类型操作的某种组合 您所需要做的就是将维度从 NHWC 排列到 NCHW 或相反 每个字母的含义可能有助于理解
  • C++11 中弱类型枚举的基础类型

    C 11 引入了强类型枚举 语法如下enum class 它们与整数类型不兼容 需要显式转换才能获取其数值 C 11 还引入了为弱类型枚举指定存储类的能力 格式如下enum name type 到这里为止都还好 但看起来即使弱类型枚举具有给
  • Boost 1.55 不适用于 Visual Studio 2013

    我已经正确编译了 boost 二进制文件并遵循了所有说明 但是我收到了很多错误 我不知道为什么 Here is my include setup 这是我用来测试 boost 的代码 include
  • 如何在login.vue中添加标题?

    如何更新 apolloProvider 的标头 请查看 nativescript vue 应用程序存储库 https github com kaanguru vue apollo login https github com kaangur
  • 如何使用 JQuery 替换

    怎样才能全部替换掉li of a ul在 JQuery 中 我不想使用以下方法将任何新项目添加到列表中append相反 我想要一个包含新内容的新列表li相同的元素ul 我努力了 for index 0 index lt users leng
  • SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败

    我知道这是一个常见问题 但不知道这里出了什么问题 正如你所看到的 有这个 return user它显示了一个有效的ID 也在数据库中检查了这一点 user new User user gt first name data first nam
  • 显示系统警报“没有邮件帐户”

    目前我正在使用 MFMailComposeViewController canSendMail 检查设备中是否存在某个帐户 如果不是 我希望显示一些警报 我看到一个同类应用程序以本地化语言发出 无邮件帐户 警报 我想要同样的警报 它也应该本
  • Android 终端中的 Wget

    如何在 android 中的 Android 终端模拟器 应用程序中使用 wget 命令 它说 system bin sh wget 未找到 这意味着需要在android中安装wget 请帮我 你需要安装在你的Android系统中 你可以执
  • 是否可以在应用程序之间共享 Cuda 上下文?

    我想在两个独立的 Linux 进程之间传递 Cuda 上下文 使用我已经设置的 POSIX 消息队列 Using cuCtxPopCurrent and cuCtxPushCurrent 我可以获得上下文指针 但是这个指针是在我调用该函数的
  • jQuery 应用 css 不透明度

    我试图让不透明度在 IE 中工作 我目前正在 IE8 中进行测试 Chrome 等工作正常 但 IE8 很糟糕 我的代码是 mydiv animate opacity 0 5 and mydiv css opacity 0 5 不透明度应用
  • org.apache.xml.serializer.ToXMLSAXHandler 无法转换为 org.apache.xml.serializer.SerializationHandler

    我使用的是JBoss6 M5和jdk1 6 22 当我尝试运行服务器时 出现部署错误 有人知道可能出现什么问题吗 谢谢 由于以下原因 部署 vfs mnt data programming rz server server default
  • zc.buildout 停止工作:ImportError:没有名为 apport.fileutils 的模块

    我已经使用 buildout 有一段时间了 没有任何问题 事实上我昨天也没有任何问题 但截至今天 我所有的项目都未能成功 我在两个不同的 Ubuntu 工作站上尝试过 结果相同 这是我得到的错误 Initializing zc buildo
  • DDD 存储库中的过滤器

    有 Campaign Entity 为此 我有 CampaignRepository 具有此功能 公共 IList FindAll 公共活动 FindByCampaignNumber 字符串编号 但现在我想要这个标准 查找今天创建的营销活动
  • 插件“geocoder”使用已弃用的 Android 嵌入版本

    当我跑步时pub get 我面临以下错误 The plugin geocoder uses a deprecated version of the Android embedding To avoid unexpected runtime
  • VS Code 中的 React Native:将 iOS 设备的配置添加到 launch.json

    我在 Visual Studio 代码中打开了一个 React Native 项目 并且尝试在物理连接的 iOS 设备上运行该项目 我直接从 Xcode 成功在设备上运行了该应用程序 但从 Visual Studio Code 中我遇到了问
  • Dart - 按 int 值传递但对列表引用?

    在 Dart 中 查看下面的代码 它是否对列表 按引用传递 对整数 按值传递 如果是这种情况 什么类型的数据将通过引用 值传递 如果不是这种情况 导致这种输出的问题是什么 void main var foo a b var bar foo