`
liyong1989
  • 浏览: 10005 次
  • 性别: Icon_minigender_1
  • 来自: 江西
文章分类
社区版块
存档分类
最新评论

由List 的toArray()引起的对Object[]转换成String[]数组的思考

    博客分类:
  • JAVA
阅读更多

  一次在项目中写了如下代码,编译通过,运行时却报错 

	public void testToArray(){
		List<String> names = new ArrayList<String>();
		names.add("JAY");
	        String[] nameArray = (String[])names.toArray();
	}

   出错信息:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
	at yong.li.mianshi.ToArray_Test.main(ToArray_Test.java:105)
   当时觉得不可思议:代码里names明明是List<String>类型的,所以names.toArray()返回的Object[]理所应
当是String[]向上转型得到的,所以(String[])names.toArray()打死都不应该报错。但事后我发现我有点想当然
了,红色标注的话是我自己想太多了,其实:
  Object[] nameObjArray = names.toArray();
  测试nameObjArray能不能向下转型成String[],最简单粗暴的方法就是用instanceof
if(!nameObjArray instanceof String[]){
  System.out.println("不可以转,你有点想多了!");
}else{
  System.out.println("可以转!");
}
 程序运行进入到if的第一个分支中去,所以不能拿toArray()返回的结果直接强转成String[].原因就是list的
toArray()返回的Object[]类型的结果并不是由String[]向上转型或类似的做法得到。但不能就由此下结论,认
为Objecgt[] 不能强转成String[],例如:
String[] names = {"JAY"};
Object nameObjArray = (Object[])names;
这个时候nameObjArray就可以直接强转回到它原来的String[]类型了。
从某个角度来说,数组也是对象,数组类型的转换,跟一般的对象类型的转换是一样的。Object[] 的类型
是:[Ljava.lang.Object ,而String[]的类型是 [Ljava.lang.String,如果一个[Ljava.lang.Object 类型的实例并
不指向[Ljava.lang.String类型的对象,强转肯定报错,这与Object与String的关系是一样的:Object obj =
new Object; String str = (String)obj,肯定要报错!
我今天才知道String型数组的类型是用“[Ljava.lang.String”,数组类型的表示:
   a." [ "表示一维数组,"[[ "二维数组
   b. "L"代表这个数组是引用数据类型的数组. "java.lang.String"是数组元素的类型,标识这个数组是什么类型
的数组.基本数据类型的每种类型都有自已对应的标识符,如int[] 的类型是"[I"表示它是int型的数组
 
 
 

 

 

 

   

  

分享到:
评论

相关推荐

    list.toArray方法

    这个方法用于将List集合中的元素转换成一个Object数组。在深入讲解之前,我们需要理解Java集合框架的基础,它包括Set、List和Map等接口,以及它们的实现类,如ArrayList、LinkedList和HashMap等。 List接口是...

    java-对象数组转换为json

    首先,我们来看如何将一个Java对象数组转换成JSON格式。这通常涉及到使用第三方库如`fastjson`、`Jackson`或`org.json`等。这里以`org.json`为例进行说明: ```java import org.json.JSONArray; PricingRangeDTO[]...

    java list与数组之间的转换详细解析

    当需要将List转换回数组时,ArrayList提供两种方法:`toArray()`和`toArray(T[] a)`。 - `toArray()`方法: 此方法返回一个新的数组,包含List中的所有元素。数组的类型是Object[],因此可能需要进行类型转换。...

    数组与List之间相互转换的方法详解

    2. **数组转换成List** 将数组转换为List,可以使用`Arrays.asList()`方法。在Java 1.5及以上版本,这个方法支持对象数组和基本类型的数组。但是,对于基本类型的数组,`Arrays.asList()`会将整个数组作为一个元素...

    Java编程实现数组转成list及list转数组的方法

    Java编程实现数组转成list及list转数组的方法 Java编程实现数组转成list及list转数组的方法是Java编程中的一种常见操作。数组和List都是Java中常用的数据结构,数组是固定大小的数据结构,而List是可变大小的数据...

    Java中List与数组相互转换实例分析

    这里需要注意,如果你直接将List转换为非Object类型的数组,如`String[]`,而不先创建一个目标类型的数组,会导致`ClassCastException`,因为`toArray()`默认返回`Object[]`,而不能直接转换为其他类型。 现在,...

    Java数组倒置.rar

    对于存储对象的数组,可以先将其转换为ArrayList,然后利用Collections的reverse()方法进行倒置,最后再转换回数组。这种方法比较方便,但会涉及到额外的内存分配。 ```java import java.util.ArrayList; ...

    JAVA中list,set,数组之间的转换详解

    例如,`list.toArray()`和`list.toArray(new String[0])`。 对于Map转换为Collection,可以直接使用`Map.values()`方法,它返回一个包含Map中所有值的Collection。如果你想得到一个特定类型的List或Set,可以进一步...

    java实现列表、集合与数组之间转化的方法

    // 将List转换为特定类型的数组,如String数组 String[] stringArray = list.toArray(new String[0]); ``` 这里需要注意,`toArray()`方法如果没有指定参数,返回的是`Object[]`类型,如果需要特定类型的数组,需要...

    VB 数组的初始化实例

    Dim array As Object() = list.ToArray() ``` ### 5. 一维与多维数组 VB支持一维数组和多维数组。一维数组就像一个线性的列表,而多维数组可以表示矩阵或表格数据。例如,初始化一个2x2的二维数组: ```vb Dim ...

    JSON与Java互相转换Demo(Eclipse)

    - `JSONArray.toArray()`:将JSON数组转换为Java数组。 2. com.google.gson库: - Gson类:核心类,提供序列化和反序列化的功能。 - `Gson.toJson(Object)`:将Java对象转换为JSON字符串。 - `Gson.fromJson...

    文本去重(去除数组中重复项)

    return (String[])list.toArray(new String[list.size()]); } public static void main(String[] args) { String[] ar = {"dd","cc","ee","ff","gg","cc","ee"}; String[] s = array_unique(ar); for(String ...

    JSON后台相互转换.docx

    Object[] objects = jsonArray.toArray(); List list = new ArrayList(); for (Object object : objects) { jsonObject = JSONObject.fromObject(object.toString()); list.add(JSONObject.toBean(jsonObject, ...

    java转换xml、list、map和json(20210924214538)[借鉴].pdf

    return JSONArray.toArray(JSONArray.fromObject(jsonString)); } ``` 以上就是Java中XML、List、Map与JSON之间转换的基本实现。需要注意的是,这些示例都是基于`json-lib`库,实际应用中可能还需要根据具体需求...

    Java操作json的通用类

    该方法用于将JSON字符串转换为Map,其中键值对可以是任意类型的数据,包括其他Map或List。这种方法特别适用于处理复杂的嵌套JSON结构。 ```java public static Map getMap4Json(String jsonString) { JSONObject ...

    Java集合与数组区别简介及相互转换实例

    注意:对于基本类型的数组,需要先转换成 wrapper 类型的数组。 ``` Integer[] numbers = {7, 7, 8, 9, 10, 8, 8, 9, 6, 5, 4}; List list = Arrays.asList(numbers); Set set = new HashSet(list); ``` 五、结论 ...

    Java 实例 - 集合转数组源代码+详细指导教程.zip

    在上面的代码中,我们使用了Apache Commons Lang库的ArrayUtils.toPrimitive()方法将Object数组转换为基本类型数组。这是因为Java的toArray()方法返回的是Object数组,而我们通常希望得到的是基本类型数组。 除了...

    Java集合List与Array的相互转换

    错误示例中,直接使用无参的`toArray()`方法会返回一个Object[],强制转换为其他类型数组会导致`ClassCastException`。正确的做法是使用泛型,如下所示: ```java List&lt;String&gt; list = new ArrayList&lt;String&gt;(); ...

    jdk8新特性.md

    List&lt;String&gt; names = people.stream().map(Person::new).collect(Collectors.toList()); ``` #### 5. 接口的默认方法和静态方法 JDK 8 允许在接口中定义默认方法(使用 `default` 关键字)和静态方法(使用 `...

Global site tag (gtag.js) - Google Analytics