Java-怎样让一个简单数组使用对象数组?
我想使用打印对象数组的方法打印简单数组,但是不能改变简单数组的属性,怎么办?
public static void printArray(Object[] o, int start, int end){
//打印下标错误时抛出异常
if(start<0 || end>o.length){
throw new IllegalStateException();
}
//输出数组
for(int i=start; i<=end; i++){
System.out.print(o[i]+" ");
}
}
public static void main(String[] args){
int[] a={12,34,65,1,3,90,45,24,31,65};
//报错了!!!!!
printArray(a, 0, a.length-1);
int ba = (int)a[1]+(int)a[2];
System.out.println(ba);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
只要把int改为integer就可以了,因为integer是类,int是基本数据类型,而基本数据类型是不能转换成对象类型的。如下代码是修改后的,可以正常运行。
public static void printArray(Object[] o, int start, int end){
if(start<0 || end>o.length){
throw new IllegalStateException();
}
for(int i=start; i<=end; i++){
System.out.print(o[i]+" ");
}
}
public static void main(String[] args){
integer[] a={12,34,65,1,3,90,45,24,31,65};
printArray(a, 0, a.length-1);
int ba = (int)a[1]+(int)a[2];
System.out.println(ba);
}
apache的commons-lang,有ArrayUtils.toObject()可以帮你解决
import org.apache.commons.lang.ArrayUtils;
public class Test {
public static void printArray(Object[] o, int start, int end) {
// 打印下标错误时抛出异常
if (start < 0 || end > o.length) {
throw new IllegalStateException();
}
// 输出数组
for (int i = start; i <= end; i++) {
System.out.print(o[i] + " ");
}
}
public static void main(String[] args) {
int[] a = { 12, 34, 65, 1, 3, 90, 45, 24, 31, 65 };
// 报错了!!!!!
printArray((ArrayUtils.toObject(a)), 0, a.length - 1);
int ba = (int) a[1] + (int) a[2];
System.out.println(ba);
}
}
for(int i=start; i<=end; i++){
System.out.print(o[i]+" ");
}
输出o[i] 时会隐式调用o[i].toString()方法,因为这里o[i]是一个Object,有toString()方法,但是一个int[]数组,int是数据类型,它不是一个类,所以没有toString()调用,这里就会报错,按frank_hust说的方法,将数组声明为Integer[] 就可以了,Integer是一个继承Object的类
在Java里对象都是继承java.lang.Object对象的,而基本类型则是没有的。所以基本类型到对象类型是无法直接转换的,也就是int到Object是无法直接转换的,必须要有一个装箱的动作将基本类型封装成对象类型才行。即是有第三方库也是进行了装箱的动作完成的。
public static void main(String[] args) {
int[] a = { 12, 34, 65, 1, 3, 90, 45, 24, 31, 65 };
// 报错了!!!!!
Integer[] aList = new Integer[a.length];
for (int i = 0; i < a.length; i++) {
aList[i] = a[i];//这里会自动进行装箱
}
printArray(aList, 0, a.length - 1);
int ba = (int) a[1] + (int) a[2];
System.out.println(ba);
}