Java集合要求泛型参数为引用类型,short是基本类型,故必须用包装类Short;添加时需先转short再自动装箱,如list.add((short)123),直接add(123)会因int字面量无法转Short而编译失败。
java 集合(如 arraylist、hashset)只能存对象,不能直接存 short 这样的基本类型。所以必须用它的包装类 short,而围绕它做类型转换时,关键在于理清“自动装箱/拆箱”边界和集合操作中的隐式行为。
为什么必须用 Short 而不是 short
集合接口定义在 java.util.Collection<E> 中,泛型参数 E 必须是引用类型。而 short 是基本类型,不满足要求。因此:
-
ArrayList<short>编译不通过 -
ArrayList<Short>合法,Short是类,可作为泛型实参 - 往
ArrayList<Short>添加short值时,会触发自动装箱(short → Short)
向集合添加 short 值的常用方式
实际编码中,你通常不会手动 new 一个 Short 对象,而是依赖自动装箱机制:
-
list.add((short)123);—— 显式转成short后自动装箱为Short -
list.add(Short.valueOf((short)123));—— 手动调用工厂方法(推荐用于避免重复创建对象) -
list.add(123);—— ❌ 错误!字面量123默认是int,不能自动转为Short;编译报错 -
list.add((short)123);✅ 正确:先强转成short,再自动装箱
从集合取出 short 值的安全写法
读取时,集合返回的是 Short 对象,需注意空指针与自动拆箱风险:
-
short s = list.get(0);—— 自动拆箱,但如果元素是null,运行时抛NullPointerException -
Short sh = list.get(0); if (sh != null) { short s = sh; }—— 先判空再拆箱,更健壮 -
short s = list.get(0) != null ? list.get(0) : 0;—— 简洁的空值兜底
与 String 互转的典型场景
集合常配合字符串输入(如解析配置、用户输入),需频繁做 String ↔ Short 转换:
-
String → Short:
Short.parseShort("32767")(失败抛NumberFormatException)或Short.valueOf("32767")(同样逻辑,但返回缓存对象) -
Short → String:
sh.toString()或String.valueOf(sh)(后者对null安全,返回"null") - 批量处理时建议用
try-catch包裹parseShort,避免单个错误中断整个流程

















