鸿蒙| 初学者轻松了解 相似又不同的 简单类型和复杂类型

343 阅读2分钟

简单类型和复杂类型

今天学习前先看看下面的代码:

 // 基本数据类型
 let numA: number = 10
 let numB: number = numA
 numB++
 ​
 console.log('numA:', numA) // numA是多少  
 console.log('numB:', numB) // numB是多少
 ​
 ​
 // 引用数据类型
 const a1:number[]=[1,2,3]
 const b1:number[]=a1
 b1.push(4)
 ​
 console.log('a1:', a1) // a1是多少  
 console.log('b1:',b1) // b1是多少
 ​

现在公布答案:

numA是 10

numB是 11

a1 是 [1,2,3,4]

a2 是 [1,2,3,4]

为什么两个结构相差不大的语句输出出来的结果却不是一样的

因为在 ArkTS 中的数据类型整体可以分为 两大类:

  1. 基本数据类型简单数据类型
    number 数字型、string 字符串型、boolean布尔型、undefined未定义、null空类型
  2. 引用数据类型复杂数据类型
    Object 对象、Function 函数、Array 数组等

这两类数据在内存中保存的方式略有不同,在赋值操作和内容更修改操作时会有不同结果

为了弄明白上述现象的原因,就需要搞清楚这两种数据类型在内存存储的差异是什么

下面接着看:

1.内存中的 堆空间 和 栈空间

Snipaste_2024-08-17_20-40-20.png

1.栈:访问速度快,基本数据类型存放到栈里面
2.堆:存储容量大,引用数据类型存放到堆里面

1.1基础数据类型存储

变量的数据直接存放在栈空间中,访问速度快

值都是独立空间,后续操作 互不影响
相当于有一栋房型都一样楼,路人甲住一单元101,路人乙住一单元102,虽说房型都一样,但里面的东西配置就不一样了,好比说路人甲买了一台电脑放在家中,但不会让路人乙家中多出一台电脑

zhan.png

1.2引用数据类型存储

duixiangtong.png 引用数据类型存储分为两部分:

1空间:存放 变量的内存地址( 指向放在数据变量值中的地址)//索引
2空间:存放 变量的 值

 class Person {
   name: string = ''
 ​
   constructor(name: string) {
     this.name = name
   }
 }
 ​
 const p1: Person = new Person('jack')
 const p2: Person = p1  //把p1的地址传给p2
 p2.name = 'rose'  // p1里面的name 也修改为 rose

p1 和 p2 栈内存中有各自独立的空间,但是保存的是堆内存的地址相同 修改 p2.name ,p1.name 也会受到影响,因为是同一份数据 比方说,路人甲和路人乙合租了同一间房间,路人甲在屋里放了一台电脑,那么路人乙打开房间也会有一台电脑

本文正在参加华为鸿蒙有奖征文征文活动