关于Java中强制类型转换的问题

 为了更好的理解我们先看下面的例子:

package com.yonyou.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/**
 * 测试类
 * @author 小浩
 * @创建日期 2015-3-2
 */

public class Test{
public static void main(String[] args) {
	 List<String> list=new ArrayList<String>();
	 list.add("Hello");
	 list.add("World");
	 list.add("HAHAHAHA");
	 

	String[] strArray2=new String[list.size()];
	list.toArray(strArray2);
	for(int i=0;i<strArray2.length;i++) 
	{
		System.out.println(strArray2[i]);
	}
	
	//下面的内容将会出现强制转换的错误
	String[] strArray=(String[]) list.toArray();   //list.toArray()会返回Object[]类型的数组,想强制转换为String[]
	for(int i=0;i<strArray.length;i++) 
	{
		System.out.println(strArray[i]);
	}

  }
}

  

对于上面的出现的问题,主要原因在于数组类型的上下级没有弄明白。

一般对于强制类型转换而言,子类可以强制转换为对应的父类,但父类是不能够强制转换为对应的子类的哦。

上面的String是Object类的子类,代码中企图通过将相应的父类(Object[])转换为对应的子类(String[]),在编译的时候不会报错,

但在运行的时候就会抛出运行时异常:强制类型转换错误。

此外,补充一个知识点,子类转换为对应的父类的过程我们称之为对象的上转型。

原文地址:https://www.cnblogs.com/xiohao/p/4313272.html