简单类型和复杂类型
今天学习前先看看下面的代码:
// 基本数据类型
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 中的数据类型整体可以分为 两大类:
- 基本数据类型(简单数据类型)
number 数字型、string 字符串型、boolean布尔型、undefined未定义、null空类型 - 引用数据类型(复杂数据类型)
Object 对象、Function 函数、Array 数组等
这两类数据在内存中保存的方式略有不同,在赋值操作和内容更修改操作时会有不同结果
为了弄明白上述现象的原因,就需要搞清楚这两种数据类型在内存存储的差异是什么
下面接着看:
1.内存中的 堆空间 和 栈空间
1.栈:访问速度快,基本数据类型存放到栈里面
2.堆:存储容量大,引用数据类型存放到堆里面
1.1基础数据类型存储
变量的数据直接存放在栈空间中,访问速度快
值都是独立空间,后续操作 互不影响
相当于有一栋房型都一样楼,路人甲住一单元101,路人乙住一单元102,虽说房型都一样,但里面的东西配置就不一样了,好比说路人甲买了一台电脑放在家中,但不会让路人乙家中多出一台电脑
1.2引用数据类型存储
引用数据类型存储分为两部分:
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 也会受到影响,因为是同一份数据 比方说,路人甲和路人乙合租了同一间房间,路人甲在屋里放了一台电脑,那么路人乙打开房间也会有一台电脑
本文正在参加华为鸿蒙有奖征文征文活动