基本数据类型和引用数据类型的存储区别?

news2024/12/30 3:11:20

目录

1、存储位置的区别

2、变量赋值时的区别

① 基本数据类型

② 引用数据类型

3、小结

① 声明变量时不同的内存地址分配

② 不同的类型数据导致赋值变量时的不同


1、存储位置的区别

基本数据类型和引用数据类型存储在内存中的位置不同:

① 基本数据类型存储在栈中        ② 引用类型的对象存储于堆中

2、变量赋值时的区别

当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

① 基本数据类型

基本类型数据是存放在栈中

let a = 10;
let b = a; // 赋值操作
b = 20;
console.log(a); // 10值

a的值为一个基本类型,是存储在栈中,将a的值赋给b虽然两个变量的值相等,但是两个变量保存了两个不同的内存地址。

下图演示了基本类型赋值的过程:

② 引用数据类型

引用类型数据存放在堆中,每个堆内存对象都有对应的引用地址指向它,引用地址存放在栈中

由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。

当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。

var obj1 = {}
var obj2 = obj1;
obj2.name = "小草莓";
console.log(obj1.name); // 小草莓

obj1是一个引用类型,在赋值操作过程中,实际是将堆内存对象在栈内存的引用地址复制了一份给了obj2,实际上他们共同指向了同一个堆内存对象,所以更改obj2会对obj1产生影响。

下图演示这个引用类型赋值过程:

3、小结

① 声明变量时不同的内存地址分配

简单数据类型存储在栈中,在栈中存放的是对应的值,是按值来访问的

引用数据类型对应的值存储在堆中,在栈中存放的是指向堆内存的地址,是按引用访问

② 不同的类型数据导致赋值变量时的不同

简单类型赋值,是生成相同的值,两个变量对应不同的地址;

复杂类型赋值,是将保存对象的内存地址赋值给另一个变量。也就是两个变量指向堆内存中同一个对象;当其中一个对象改变时,另一个对象也会变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20230420 | 977. 有序数组的平方、 209. 长度最小的子数组、59. 螺旋矩阵 II

1、977. 有序数组的平方 方法1&#xff1a;使用暴力法&#xff0c;一遍for&#xff0c;一次排序。这个时间复杂度是 O(n nlogn)&#xff0c; 可以说是O(nlogn)的时间复杂度。 class Solution {public int[] sortedSquares(int[] nums) {//先计算出平方for(int i0;i<nums.le…

Vulnhub项目:JANGOW 1.0.1

靶机地址&#xff1a;Jangow: 1.0.1 ~ VulnHub 渗透过程&#xff1a; kali ip&#xff1a;192.168.56.104&#xff0c;使用arp-scan -l查看到靶机ip192.168.56.118 对靶机进行端口探测&#xff0c;发现了21、80端口 访问80端口&#xff0c;发现site目录 点击进去后&#xff0…

HIVE SQL 进行 Join 和 group by的具体原理及分区方式

HIVE SQL 实现Join和group by 具体原理 1、JOIN 在map的输出value中为不同表的数据打上tag标记&#xff0c;在reduce阶段根据tag判断数据来源。MapReduce的过程如下&#xff1a; 2、 GROUP BY HIVE SQL 实现Join和group by 的分区原理 1、JOIN 在join操作中&#xff0c;两个…

【Java】哔哩哔哩编程题练习

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 每日随心练&#xff0c;望各位大佬喜欢&#xff0c;做法有很多种&#xff0c;以下是我个人的想法 目录 一、复数乘法 二、一年中的第几天 三、k个一组翻转链表 一、复数乘法 输入两个表示复…

电路中电容的作用

总体目录 电源设计中常见电容常见电容作用降压滤波高通滤波平滑输出电压 延时耦合去耦/退耦旁路 不常用电容作用调谐电容衬垫电容补偿电容中和电容稳频电容定时电容加速电容启动电容运转电容 电源设计中常见电容 安规电容 常见电容作用 https://www.bilibili.com/video/BV…

【K8S系列】深入解析控制器

目录 序言 1 基础介绍 1.1 前情提要 1.2 Kube-controller-manager介绍 1.3 控制器类型 2 使用介绍 2.1 控制循环 2.2 Deployment控制器 实际状态&#xff1a; 期望状态&#xff1a; PodTemplate&#xff1a; 3 总结 4 投票 序言 在你想要放弃的时候&#xff0c;想…

常见的上采样操作以及其Pytorch实现

文章目录 常见的上采样操作以及其Pytorch实现一、[插值](https://www.cnblogs.com/zhaozhibo/p/15024928.html)1.最近邻插值2.双线性插值3.双三次插值 二、反卷积三、sub-pixel Convolution四、其它方法1.[superpoint](https://arxiv.org/abs/1911.11763)使用方法2.待补充 常见…

Word 设置标题编号

用到了多级列表&#xff0c;所谓多级列表&#xff0c;就是为段落标上编号&#xff0c;并不一定就要对文字使用&#xff0c; 教程参考自Word 多级列表编号方法总结&#xff08;二&#xff09;——自定义编号 - 知乎 直接看我的就好了 假设我们有一个需求 类似于这样的三级标题…

【SpringBoot】面试必杀技-泰山陨石坠,SpringBoot中主启动类的run方法启动流程是什么?

开头导语由Chatgpt完成 当今互联网行业中&#xff0c;Java后端开发岗位的竞争异常激烈&#xff0c;对于面试者来说&#xff0c;掌握一些技巧和知识点将有助于脱颖而出。而对于SpringBoot框架的使用和运行机制&#xff0c;更是Java后端开发岗位中不可或缺的技能点之一。在Spring…

Python里的元组、列表和字典区别

列表&#xff1a;可更改、有序、可重复、元素可以是任何对象 列表示例&#xff1a;[1,a,[2,3]] 元组&#xff1a;不可更改、有序、可重复、元素可以是任何对象 元组示例&#xff1a;(b,1,[2,3]) 字典&#xff1a;可更改、无序、键不可重复、键不可变、值可以是任何对象&…

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存雪崩) Redis两种持久化方案详情对比(RDB、AOF)

【Redis-面试题及持久化方案】Redis相关面试题&#xff08;缓存穿透、缓存击穿、缓存雪崩&#xff09; & Redis两种持久化方案详情对比&#xff08;RDB、AOF&#xff09; 1&#xff09;Redis 面试题1.1.高频面试题&#xff1a;缓存穿透、缓存击穿、缓存雪崩1.2.低频面试题&…

校友小程序定制开发 带我们回到那个学生时代

学生时代总是给人一种单纯美好的感觉&#xff0c;也会是每个人记忆深处最深刻的回忆&#xff0c;尤其是一起学习生活几年的同窗随着毕业不得不各奔东西&#xff0c;但是大家都对母校有着不一样的情怀&#xff0c;也想有一个什么东西能够把各个高校校友联系在一起。校友小程序开…

瑞芯微 Rockchip rknn 模型在线预编译

瑞芯微 Rockchip rknn 模型在线预编译 flyfish 主机Host环境 Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy开发板Target环境 RV1126一 主机连接开发板 用线连起来后&#xff0c;查看usb信息 没权限的提示 no permissions (…

微信小程序笔记(1)

小程序笔记 小程序一个页面为什么有四个文件&#xff1f; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVdz4I1W-1681982063887)(C:\Users\26387\AppData\Roaming\Typora\typora-user-images\image-20230419170019877.png)] wxss&#xff1a;写页…

对学历贬值的再观察

最近在求职市场上观察到这样一个现象&#xff0c;有些4年前硕士学历就能进入的职业&#xff0c;现在都要博士了&#xff0c;不免让人有一种4年书白读的感觉。所以想再观察一下学历贬值&#xff0c;平复一下心情&#xff08;不是&#xff09;。 学历贬值的原因&#xff1a;供大于…

day1 Flappy bird项目介绍

项目介绍 功能分析&#xff1a; 1、按下空格小鸟上升&#xff0c;不按下落&#xff1b; 2、搭建小鸟需要穿过的管道&#xff1b; 3、管道自动左移和创建&#xff1b; 4、小鸟触碰到管道游戏结束&#xff1b; 知识储备&#xff1a; 1、C语言&#xff1b; 2、数据结构 -…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处&#xff1a; Vue.js 基本上遵循 MVVM&#xff08;Model–View–ViewModel&…

[oeasy]python0135_变量名与下划线_dunder_声明与赋值

变量定义 回忆上次内容 变量 就是 能变的量上次研究了 变量标识符的 规则 第一个字符 应该是 字母或下划线合法的标识符可以包括 大小写字母数字下划线 还研究了字符串(str)的函数 isidentifier查询字符串 是否为合法标识符 最后发现 这个isidentifier函数有时候不好使&…

实战iOS App 重签名

熟悉iOS开发的同学都知道,iOS应用的上架流程主要分为以下几步: 创建开发者账号借助辅助工具appuploader创建证书,描述文件iTunes connect创建App打包IPA上传App Store等待审核在签名的流程中,有一个App重签名的步骤,主要针对的是一些大公司有多个App的情况,多个App一个申…

Linux设备驱动开发 - S3C2440时钟分析

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅&#xff01; 你的喜欢就是我写作的动力&#xff01; 目录 系统框架图FLCK,HCLK,PCLK时钟源的选择 时钟体系流程流程分析驱动中的clk 系统框架图 2440是一个SOC(system on …