java 数组 Object 转成 String

在安卓中如果将Object[]直接用(String [])转成Sting类型,会报错Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; 错误。
但是如果我用for循环将Object[]中的元素逐个的转化成String[]则不会 报错。为什么

正确代码如下
public Cursor fetchDataBySql(int rowId,String user_name) {
String searchSQL = "select * from " + DATABASE_TABLE + " WHERE _id = ? ";
Object[] args = { rowId };
String[] args2 = new String[args.length];
for(int i=0;i<args.length;i++){
args2[i] = args[i].toString();
}
Cursor cursor = sqliteDatabase.rawQuery(searchSQL,args2) ;
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}

错误代码
Object[] args = { rowId };
Cursor cursor = sqliteDatabase.rawQuery(searchSQL, (String[]) args);

强制类型转换或者自动向上造型都有个先决条件,就是被造型的对象必须本来就是转换后的类型数据。
比如你的 Object[] args={ rowld },这里rowld是一个int类型,但是java里所有类型都继承自Object类型,所以rowld也可以说是Object类型的对象,赋值不会报错。args2[i]=args[i].toString();由于Object.toString()方法返回类型是Stirng,所以赋值也不会报错。
但是直接将 args 转成 args2 明显就类型不对了,就如 String str= 1;一样,类型不兼容啊。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-20
String是object的子类,在父子关系上,父类的引用是指向一个子类实例则可以通过强制转化将父类引用转化为子类引用,而对于父类的引用能指向一个子类实例是因为java里面的隐含了自动转换,但是引用是指向父类的一个实例而不是一个子类实例的时候,这种向下转换则不能完成,因此运行时报错。
第2个回答  2013-11-20
java里进行强制类型转换的话,需要类型具有继承关系,而String是Object类的子类,所以可以进行转化,而args只是一个引用,存储的就是地址,不能这么进行强制类型转化吧追问

谢谢你,但是我觉得我上面的遍历转换,还要另外的创建变量,影响整体运行效率,有什么好的解决办法吗?谢了

追答

我刚才查了一下,貌似我说的不大对,数组的强制类型转换也是可以的,之前你的失败应该是因为rowld是int型,向上转型成Object,然后你后面想把Object强制转化成String是向下转型,这是不允许的,除非Object是以String构造的。你把错误代码的第一行改一下试试:
Object[] args=new String[]{rowld};

第3个回答  2018-07-27
  java中可以使用for循环,或者while循环,将Object的数据一个个取出来,并分别赋值给String数组。
  但是这个也是要求这个Object是一个实体类或者有属性才行。
第4个回答  2013-11-21
String [] args = { String.valueOf(rowId) };

//.............

Cursor cursor = sqliteDatabase.rawQuery(searchSQL, args);

为什么object可以转为string
String strVal = (String)obj;在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。但是,Integer obj = new Integer(100);String strVal = (String)obj;如上格式代码,将会报语法错误。此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。方法3:采用String.valueOf(Object)String.v...

java 数组 Object 转成 String
比如你的 Object[] args={ rowld },这里rowld是一个int类型,但是java里所有类型都继承自Object类型,所以rowld也可以说是Object类型的对象,赋值不会报错。args2[i]=args[i].toString();由于Object.toString()方法返回类型是Stirng,所以赋值也不会报错。但是直接将 args 转成 args2 明显就类型...

java如何把Object中的数据转化为String数组
String[] str=new String[llist.size()];llist.toArray(str);这样Object[]数组就转到了String[]数组了,你可以去参考toArray()方法原型:public synchronized <T> T[] toArray(T[] a) { if (a.length < elementCount)a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getCom...

java一个Object对象怎么转化成一个String[ ][ ],这个Object对象是String...
定义数组应该写成这样:Object[][] object = {{"22","fdsf"},{"22","fdsf"},{"22","fdsf"},{"22","fdsf"}};

java一个Object对象怎么转化成一个String[ ][ ],这个Object对象是String...
强制转换啊 Object[][] aaa = new Object[][]{{"a","b"},{"c","d"}};String[][]d =(String[][])aaa;

java怎么把一个数组转化为字符串
通过数组循环的方式,最终拼接成字符串 1、定义一个整型数组 int[] arr = new int[3];\/\/定义一个长度3的整型数组2、拼接成字符串 String s = "";for(int i=0;i

求问List <Object[]> 如何转换成 String []
iterator(); int i = 0; while(it.hasNext()){ row.add((String[])it.next()); s[i]=row.get(i)[0]; i++; } return s;问题补充:enet_java 写道toArray() 是返回集合中所有元素的数组,怎么可以返回String[]呢?", typeComp); List <Object[]> row = new ArrayList<Object[...

Object[]和String[] 有关系没,之间可以赋值吗,求详解,最好举例_百度知 ...
Object是所有类的父类。如果你定义一个Object的数组的话,什么数据都可以存储进去。但你取出来的时候就要进行一个数据类型的强制转换。否则这个数据就是一个Object类型的数据。将变为不可用。所以根据你的提问,它们两个是有很大关系的,并且可以赋值。

java 如何将数组转化成string类型
用Arrays辅助类。。。如 String[] a = {"aaaa","bbbb","cccccc"};String b = Arrays.toString(a);不过输出的是这样的:[aaaa, bbbb, cccccc]如果想把内容连起来的话 我觉得只能用循环把内容串起来了。。。

java中怎么把string数组转成string
public static void main(String[] args) { String [] arr = {"41","a","5","g56"}; \/\/0),利用Arrays,将数组对象转换为数组原始格式的String对象:String s1 = Arrays.toString(arr);System.err.println(s1);\/\/输出:[41, a, 5, g56]\/\/1),利用StringUtils,将数组对象的成...

相似回答