原始类型的不可变性指其值一旦创建便不可更改,所有“修改”操作实际生成新值并重新绑定变量;字符串、数字、布尔等类型无法原地修改字符、数值或添加属性,赋值和函数传参均为值拷贝,设计目的为安全、优化与纯函数支持。

原始类型的不可变性,不是“禁止修改”,而是“根本改不了原值”——所有看似修改的操作,实际都生成了一个新值,再让变量指向它。
不可变性的真实含义
字符串、数字、布尔等原始类型一旦创建,其内在值就固定了。比如:
- 字符串不能改字符:let s = "abc"; s[0] = "x" 不报错,但 s 还是 "abc"
- 数字不能被“加一”改变自身:let n = 5; n++ 看似在改 n,其实是计算出 6,再把 n 重新绑定到 6
- 无法添加属性:let x = 42; x.name = "age"; console.log(x.name) → undefined
赋值本质是重绑定,不是覆盖
原始类型变量存储的就是值本身,不是地址。所以:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- let a = "hello"; let b = a —— b 得到的是 "hello" 这个值的副本,两个变量完全独立
- b += " world" —— 创建新字符串 "hello world",b 指向它,a 仍指向原来的 "hello"
- 函数传参也是拷贝值:传入数字 10,函数内改参数,不影响外部变量
为什么设计成不可变?
这不是限制,而是保障:
- 安全可靠:多个地方用同一个字符串,谁都不会意外破坏它
- 便于优化:引擎可对相同字面量复用内存(如多个 "loading" 可能共用同一块存储)
- 符合纯函数逻辑:像 String.prototype.toUpperCase() 总是返回新串,不污染输入,利于链式调用和状态管理
和 const 的关系
const 锁的是变量绑定,原始类型天然不可变,两者叠加带来双重确定性:
- const num = 100; num = 200 → 报错(const 阻止重赋值)
- 即使没有 const,num = 200 也只是让 num 指向新数字,旧数字 100 依然存在(只是没人引用了)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










