Java数组类型

数组是一种效率最高的存储和随机访问对象的一种方式,一个数组由两部分构成:数组引用变量、数组对象,数组引用变量指向数组对象的内存地址。

[img]http://dl.iteye.com/upload/attachment/456678/d4ee60e3-edaa-3c59-b567-0289715e144d.jpg[/img]


public static void main(String[] args){
int[] a;//为引用变量分配空间
a=new int[4];//数组对象初始化,默认值为0
}

多维数组是由一维数组演化而来的,如二维数组,数组对象的每一个值都是一个一维数组的引用。
Java 中,数组类型转换是一个涉及数据结构与类型系统的问题。由于 Java 数组具有协变性(covariant),但不支持泛型协变,因此在进行数组类型转换时需要注意类型安全性。 ### 基本类型数组与包装类型数组之间的转换 #### 将 `int[]` 转换为 `Integer[]` 可以使用 Java 8 引入的 Stream API 来完成这一转换: ```java import java.util.Arrays; public class Main { public static void main(String[] args) { int[] array = new int[]{1, 2, 3, 4, 5}; Integer[] arrayInteger = Arrays.stream(array).boxed().toArray(Integer[]::new); System.out.println(Arrays.toString(arrayInteger)); // output: [1, 2, 3, 4, 5] } } ``` #### 将 `Integer[]` 转换为 `int[]` 同样可以借助 Stream 实现反向转换: ```java Integer[] arrayInteger = new Integer[]{1, 2, 3, 4, 5}; int[] array = Arrays.stream(arrayInteger).mapToInt(Integer::intValue).toArray(); System.out.println(Arrays.toString(array)); // output: [1, 2, 3, 4, 5] ``` ### 不同引用类型数组之间的转换 Java 支持在引用类型之间进行数组的强制类型转换,前提是这些类型之间存在合法的继承关系。 #### 合法的数组类型转换示例 ```java String[] strings = new String[]{"a", "b", "c"}; Object[] objects = strings; // 允许将子类数组赋值给父类数组引用 String[] againStrings = (String[]) objects; // 可以安全地向下转型 ``` #### 非法的数组类型转换示例 如果一个数组最初声明为 `Object[]` 类型,即使它包含的所有元素都是 `String` 对象,也不能将其转换回 `String[]` 类型: ```java Object[] objects = new Object[]{"a", "b", "c"}; String[] strings = (String[]) objects; // 运行时抛出 ClassCastException ``` ### 字符串数组转换为数值型数组 通过 `Stream` 和 `mapToXXX` 方法,可以将字符串数组转换为 `int[]`、`long[]` 或 `double[]` 等基本类型数组[^3]。 ```java String[] str = new String[]{"1", "2", "3", "4", "5"}; int[] ints = Arrays.stream(str).mapToInt(Integer::valueOf).toArray(); long[] longs = Arrays.stream(str).mapToLong(Long::valueOf).toArray(); double[] doubles = Arrays.stream(str).mapToDouble(Double::valueOf).toArray(); ``` ### 使用泛型集合辅助转换 对于更复杂的对象数组转换,例如从 `T[]` 转换为 `E[]`,可以通过先转换为 `List<E>` 再转换为数组的方式实现: ```java <T, E> E[] convertArray(T[] source, Function<T, E> converter, IntFunction<E[]> generator) { return Arrays.stream(source) .map(converter) .toArray(generator); } // 示例调用 Integer[] numbers = {1, 2, 3}; String[] stringNumbers = convertArray(numbers, Object::toString, String[]::new); ``` 上述方法利用了泛型和函数式编程特性,提供了一种通用的数组转换模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值