array.of 与 array 构造函数关键区别在于单参数数字时:array(5) 创建长度为5的稀疏数组,array.of(5) 创建含一个元素[5]的数组;多参数或非数字参数时结果相同但语义更清晰;array.of 不展开、不转换、保持引用,无参均返回[]。
array.of 和 array 构造函数都能创建数组,但行为逻辑完全不同——关键区别在于:array.of 把所有参数原样当数组元素,而 array 构造函数在单个数字参数时会误判为“数组长度”。
单参数场景下行为截然相反
这是最常踩坑的地方。传一个数字时,两者结果完全不一样:
-
Array(5) → 创建长度为 5 的稀疏数组:
[](没有实际元素,索引不可遍历) -
Array.of(5) → 创建含一个数字的数组:
[5] - 同样适用于
0、-3、NaN:Array.of(0)是[0],不是空数组;Array(0)是[](长度为 0 的空数组)
多参数或非数字参数时表现一致,但语义更清晰
当传两个及以上参数,或唯一参数不是数字时,Array 和 Array.of 结果相同,但 Array.of 的意图更明确:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Array("a", "b")和Array.of("a", "b")都返回["a", "b"] -
Array(null)和Array.of(null)都返回[null](注意:不是空槽,是真实值) -
Array(undefined)和Array.of(undefined)都返回[undefined]
不区分类型,也不做展开或转换
Array.of 对所有参数一视同仁,包括对象、函数、正则、数组等非原始类型:
-
Array.of({x:1}, [2,3], /test/)→[{x:1}, [2,3], /test/] - 传入的对象或数组不会被解构,引用关系保持不变
- 不会像
Array.from()那样尝试迭代类数组,也不像扩展运算符那样展开
无参调用都返回空数组,但设计目标不同
两者调用 Array() 和 Array.of() 都返回 [],但出发点不同:
-
Array()的空参行为是构造函数默认逻辑 -
Array.of()的空参行为是“参数即元素”的自然延伸——没给参数,就生成空数组 - 这种一致性让 Array.of 更适合封装工具函数或处理动态参数列表
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










