请教一个java问题,希望大虾们帮哈忙。 先看一下下面的JAVA 程序吧。
importjava.util.*;publicclassMyVectorextendsVector{publicMyVector(){super(1,1);}publi...
import java.util.*;
public class MyVector extends Vector{
public MyVector(){
super(1,1);
}
public void addInt(int i){
addElement(new Integer(i));
}
public void addFloat(float f){
addElement(new Float(f));
}
public void addString(String s){
addElement(s);
}
public void addCharArray(char a[]){
addElement(a);
}
public void printVector(){
Object o;
int length=size();
System.out.println("Number of vector element is "+length+" and they are: ");
for(int i=0; i<length; i++){
o=elementAt(i);
if(o instanceof char[]){
//System.out.println(o); 不好
System.out.println(String.copyValueOf((char[]) o));
}
else{
System.out.println(o.toString());
}
}
}
public static void main(String[] args){
MyVector v=new MyVector();
int digit=5;
float real=3.14f;
char letters[]={'a','b','c','d'};
String s=new String("Hi there!");
v.addInt(digit);
v.addFloat(real);
v.addString(s);
v.addCharArray(letters);
v.printVector();
}
}
有两点我不太懂
NO.1 [ Object o ] 这里的Object属于什么啊?貌似不是老祖宗吧,希望详细解释。
NO.2 [ //System.out.println(o); 不好 ] 这里想大虾们解释一下为什么。
程序来源是一本教科书。(程序编译通过) 展开
public class MyVector extends Vector{
public MyVector(){
super(1,1);
}
public void addInt(int i){
addElement(new Integer(i));
}
public void addFloat(float f){
addElement(new Float(f));
}
public void addString(String s){
addElement(s);
}
public void addCharArray(char a[]){
addElement(a);
}
public void printVector(){
Object o;
int length=size();
System.out.println("Number of vector element is "+length+" and they are: ");
for(int i=0; i<length; i++){
o=elementAt(i);
if(o instanceof char[]){
//System.out.println(o); 不好
System.out.println(String.copyValueOf((char[]) o));
}
else{
System.out.println(o.toString());
}
}
}
public static void main(String[] args){
MyVector v=new MyVector();
int digit=5;
float real=3.14f;
char letters[]={'a','b','c','d'};
String s=new String("Hi there!");
v.addInt(digit);
v.addFloat(real);
v.addString(s);
v.addCharArray(letters);
v.printVector();
}
}
有两点我不太懂
NO.1 [ Object o ] 这里的Object属于什么啊?貌似不是老祖宗吧,希望详细解释。
NO.2 [ //System.out.println(o); 不好 ] 这里想大虾们解释一下为什么。
程序来源是一本教科书。(程序编译通过) 展开
3个回答
展开全部
Ooject是个基类,因为这是在方法里面,不确定会传什么参数过来所以用它来接受
o instanceof char[] 如果o是字符数组的子类,那么他有可能是个字符,也有可能是个字符数组,如果直接打印的话数组得迭代取值吧。
所以用String.copyValueOf,不管他是数组还是字符,你都把它的值拷贝出来重新组成一个字符串,这样就可以直接打印输出了。
o instanceof char[] 如果o是字符数组的子类,那么他有可能是个字符,也有可能是个字符数组,如果直接打印的话数组得迭代取值吧。
所以用String.copyValueOf,不管他是数组还是字符,你都把它的值拷贝出来重新组成一个字符串,这样就可以直接打印输出了。
追问
你的意思是如果 o 是字符数组就没办法一次性输出,得用 String.copyValueOf 方法吧它变为字符串(即string型变量),而如果是字符就直接调用本身的 toString() 方法进行自我输出?
感谢回答!
追答
是这样的啊
我前面还弄错了,o instanceof char[]就是判断左边的是不是右边的子类咯,是的话它就是个数组吧,你也可以用String.ValueOf方法,如果是字符的话,你的if else 条件判断不是表明了它toSting()直接输出么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Object是所以对象的父类
然后System.out.println(o);这里o是object类型 程序显示准备打印o然后发现o是object类型,然后要自己转换类型才打印出来 ,虽然一样可以出来但是影响一定的性能
如果是System.out.println(o.toString())这样就是直接打印出被转换成string类型的o了
然后System.out.println(o);这里o是object类型 程序显示准备打印o然后发现o是object类型,然后要自己转换类型才打印出来 ,虽然一样可以出来但是影响一定的性能
如果是System.out.println(o.toString())这样就是直接打印出被转换成string类型的o了
追问
怎么没有用 Object o=new Object(); 而直接就可以使用 o 实例(与一般类类型的使用貌似反常了)?
追答
这个就是多态了 父类引用指向子类对象 就像上面的程序public class MyVector extends Vector
这个类
用的时候可以这样写
Vector v=new MyVector ();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Object是老祖宗啊,呵呵你悟性不错,Object是java所有对象的父类
/System.out.println的参数是String,这样的话默认用到了运算符重载,性能下降了
/System.out.println的参数是String,这样的话默认用到了运算符重载,性能下降了
更多追问追答
追问
你的意思是 o 属于 Object 的一个实例? 那如果这样它有什么属性?
然后你说 System.out.println(o); 的参数是 String ,会用到运算符重载而导致性能下降,貌似不太懂。 普通的 System.out.println(".."); 不也是输出 string ,参数貌似也应该是 string (里面建立了 string 的实例吧),这两种情况难道有差别??
还是感谢你的回答!
追答
它有什么属性.你可以在eclipse中.出来的
System.out.println(".."); 是输出 string啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询