Java中关于Object的问题
//有一些问题,譬如说查找不到"张小莉"结果publicclassGroup{//在对象数组中查找/***@paramargs*/publicstaticvoidprin...
//有一些问题,譬如说查找不到"张小莉"结果
public class Group {//在对象数组中查找
/**
* @param args
*/
public static void print(Object table[])
{
if(table!=null)
for(int i=0;i<table.length;++i)
System.out.println(table[i].toString());//运行时多态
}
public static int indexOf(Object table[],Object obj)
{ //在对象数组中查找给定值,若查找成功返回元素下标,否则返回-1
if(table!=null&&obj!=null)
for(int i=0;i<table.length;++i)
if(obj.equals(table[i]))
return i;
return -1;
}
public static Person oldest(Person[] table)
{
if(table==null)
return null;
int max=0;
for(int i=0;i<table.length;++i)
if(table[i].getAge()>table[max].getAge())
max=i;
return table[max];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] table={
new Person("李小明",new MyDate(1989,3,15)),
new Student("史珍香",new MyDate(1990,11,27)),
new Student("胡东东",new MyDate(1990,4,3),"计算机"),
new Student("张小莉",new MyDate(1991,5,16),"电子信息"),
};
print(table);
String name="张小莉";
int index=indexOf(table,new Person(name));//查找姓名为name的对象
System.out.println("查找\""+name+"\"结果:"
+((index!=-1)?table[index].toString():"未找到"));
System.out.println("年龄最大者是("+oldest(table).toString()+")");
Student.howMany();
}
}
1.有一些问题,譬如说查找不到"张小莉"的结果?是index中=-1出了问题么?
2.print(Object table[])中的Object是调用根类还是指代引用对象?
3.疑惑同第二问,indexOf(Object table[],Object obj)我调用的是根类呢,还是引用对象,求详细解释。。。
PS:用此可能不恰当,欢迎拍砖! 展开
public class Group {//在对象数组中查找
/**
* @param args
*/
public static void print(Object table[])
{
if(table!=null)
for(int i=0;i<table.length;++i)
System.out.println(table[i].toString());//运行时多态
}
public static int indexOf(Object table[],Object obj)
{ //在对象数组中查找给定值,若查找成功返回元素下标,否则返回-1
if(table!=null&&obj!=null)
for(int i=0;i<table.length;++i)
if(obj.equals(table[i]))
return i;
return -1;
}
public static Person oldest(Person[] table)
{
if(table==null)
return null;
int max=0;
for(int i=0;i<table.length;++i)
if(table[i].getAge()>table[max].getAge())
max=i;
return table[max];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] table={
new Person("李小明",new MyDate(1989,3,15)),
new Student("史珍香",new MyDate(1990,11,27)),
new Student("胡东东",new MyDate(1990,4,3),"计算机"),
new Student("张小莉",new MyDate(1991,5,16),"电子信息"),
};
print(table);
String name="张小莉";
int index=indexOf(table,new Person(name));//查找姓名为name的对象
System.out.println("查找\""+name+"\"结果:"
+((index!=-1)?table[index].toString():"未找到"));
System.out.println("年龄最大者是("+oldest(table).toString()+")");
Student.howMany();
}
}
1.有一些问题,譬如说查找不到"张小莉"的结果?是index中=-1出了问题么?
2.print(Object table[])中的Object是调用根类还是指代引用对象?
3.疑惑同第二问,indexOf(Object table[],Object obj)我调用的是根类呢,还是引用对象,求详细解释。。。
PS:用此可能不恰当,欢迎拍砖! 展开
展开全部
查找不到"张小莉"可能是因为你没有重写equals方法,又因为你在方法中声明的是Object,所以你只能重写Object的equals方法,或者你重写了Person的equals方法后在print这些方法里进行强行转换类型(Student类是继承自Person类吧?)。至于你后面的两个问题我不明白你的意思。你在方法参数中声明了一个参数的类型,你在方法中用的就是声明的类型的属性和方法,除非进行强转。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如此长一段代码竟在这里纠结啊,关于类型去看 Java语言规范 ,Java虚拟机规范。这个很容易理解。我就不敲出来了。关于 RTTI 运行时类型匹配 楼主必须要明白他的意义。提个醒,有空一定要看看。
其实不管是C++中的虚机制及RTTI,还是Java中的所谓的对象的上转型对象,对象的下转型对象。本质反映的就是动态性,也就是RTTI。RunTime Type Identification 。Java中的引用类似到C++中的指针,区别是它指向的是一个描述相关内容的索引信息表或者常量表,而由这些索引中的信息来决定具体指向的最终内存,在这个过程中因为有垃圾回收机制可能会修改索引表或者常量表,因此不能叫做指针的一个理由便是这。它没有直接指向对象或者其它的实际内存位置。 大家都说Java效率低,这便是一个原因之一。
内存模型
对象切片
RTTI
建议你去看看相关资料。
其实不管是C++中的虚机制及RTTI,还是Java中的所谓的对象的上转型对象,对象的下转型对象。本质反映的就是动态性,也就是RTTI。RunTime Type Identification 。Java中的引用类似到C++中的指针,区别是它指向的是一个描述相关内容的索引信息表或者常量表,而由这些索引中的信息来决定具体指向的最终内存,在这个过程中因为有垃圾回收机制可能会修改索引表或者常量表,因此不能叫做指针的一个理由便是这。它没有直接指向对象或者其它的实际内存位置。 大家都说Java效率低,这便是一个原因之一。
内存模型
对象切片
RTTI
建议你去看看相关资料。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 要正确的查找,首先要确保你的Person类正确的复写了equals(Object )方法,而不能用Object类之中的默认方法。
2. 如果Person 类Override了toString()方法, print(Object[] table)的时候就会调用Person类自己的toString方法,否者是调用Object类中的方法。
3. indexOf(Object [], Object ) 的调用方法是正确的,关键是要看你传入的对象所在的类是否有复写equals()方法。
2. 如果Person 类Override了toString()方法, print(Object[] table)的时候就会调用Person类自己的toString方法,否者是调用Object类中的方法。
3. indexOf(Object [], Object ) 的调用方法是正确的,关键是要看你传入的对象所在的类是否有复写equals()方法。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要重写Student,Person类中的hashCode和equals方法,还有toString如果想要输出自己想要的结果的话
调用的引用对象,可以参考你打印出来的数组的信息
调用的引用对象,可以参考你打印出来的数组的信息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询