包含int数组的类数组编译时初始化:Java能否实现类似C++的效果?
结论
可以实现,Java虽然没有原生结构体类型,但通过类配合数组静态初始化语法,完全可以达到和示例C++代码一致的初始化效果。
具体实现步骤
- 首先定义和C++结构体S功能等价的Java类,添加构造方法方便初始化:
class S { public int[] arr; public int x; public S(int[] arr, int x) { this.arr = arr; this.x = x; } }
- 直接使用数组静态初始化语法完成赋值,效果和C++示例完全一致:
S[] s = { new S(new int[]{1, 2, 3}, 111), new S(new int[]{2, 3, 4}, 222), new S(new int[]{3, 4, 5}, 333) };
补充说明
- 如果你使用Java 9及以上版本,也可以用
List.of方法实现更简洁的不可变集合初始化,需要数组的话再调用toArray()方法转换即可:// Java 9+ 写法 List<S> sList = List.of( new S(new int[]{1, 2, 3}, 111), new S(new int[]{2, 3, 4}, 222), new S(new int[]{3, 4, 5}, 333) ); - Java的数组是引用类型,上述初始化逻辑如果声明为
static final修饰的类成员,JVM会在类加载阶段就完成初始化,运行时性能和C++的编译期初始化差异极小。
内容的提问来源于stack exchange,提问作者user93353
相关产品推荐
相关产品推荐

