Object[]数组与String[]数组转换问题

本文探讨了Java中Object[]与String[]之间的类型转换问题,详细解释了为何直接转换会导致ClassCastException异常,并展示了Object数组中元素的实际类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一本书中看到Object[] 与 String[] 的转换。发现有点很奇怪

Object[] ob = {"hello","World"};

String[] str = (String[]) ob;

//报异常Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String]

原因是Object[] 数组不能强转成String[]数组;


Object[] object = {"ss","sssss"};
	System.out.println(object.getClass());
//输出结果:class [Ljava.lang.Object;
for(Object o : s) {
	System.out.println(o.getClass());
}
//输出结果:class java.lang.String
Object[] object = new String[10];
System.out.println(object.getClass());
//输出是:class [Ljava.lang.String;


### 将 Object 数组转换String 列表的方法 在 Java 中,有多种方式可以将 `Object` 类型的数组转换为 `String` 类型的列表。以下是几种常见且有效的方式: #### 方法一:使用 `Arrays.asList()` 和 `stream().map()` 通过先将 `Object[]` 转换为列表再映射至字符串列表是一个直观的选择。 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Object[] objectArray = {"A", "B", "C"}; List<String> stringList = Arrays.stream(objectArray) .map(Object::toString) .collect(Collectors.toList()); System.out.println(stringList); } } ``` 这种方法利用了 Java 8 的 Stream API 提供的强大功能来简化操作[^3]。 #### 方法二:遍历并手动添加到列表 对于不支持最新版本特性的环境,可以选择传统循环的方式来实现相同的效果。 ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { Object[] objectArray = {"D", "E", "F"}; List<String> stringList = new ArrayList<>(); for (Object obj : objectArray) { stringList.add(obj.toString()); } System.out.println(stringList); } } ``` 此方法虽然较为冗长,但在兼容性和理解上更为直接[^1]。 #### 方法三:借助第三方库(如 Apache Commons Lang) 如果项目已经引入了诸如 Apache Commons 这样的实用工具包,则可以直接调用其提供的便捷函数完成转换工作。 ```xml <!-- Maven依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> ``` ```java import org.apache.commons.lang3.ArrayUtils; // ... Object[] objectArray = {"G", "H", "I"}; List<String> stringList = ArrayUtils.isEmpty(objectArray) ? new ArrayList<>() : Arrays.asList(ArrayUtils.toObject((Object[]) objectArray)) .stream() .map(Object::toString) .collect(Collectors.toList()); ``` 这种方式不仅提高了代码可读性还增强了健壮性[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值