Person p;
Teacher t;
Student s;
P,t和s都是非空值。
if(t instanceof Person){s=(Student)t;}
这个if语句导致的结果是什么
A.将构造一个Student对象。
B.表达式合法。
C.编译时非法。
D.编译时合法而在运行时可能非法。
答案c
instanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象,由于java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象,这时就可以使用instanceof了。当左操作数是右操作数指出的类的实例或者是子类的实例时都返回真,如果是将一个子类的实例赋值给一个父类的变量,用instanceof判断该变量是否是子类的一个实例时也将返回真。此题中的if语句的判断没有问题,而且将返回真,但是后面的类型转换是非法的,因为t是一个Teacher对象,它不能被强制转换为一个Student对象,即使这两个类有共同的父类。如果是将t转换为一个Person对象则可以,而且不需要强制转换。这个错误在编译时就可以发现,因此编译不能通过。
24.给出下面的类:(单选题)
public class Sample{
long length;
public Sample(long l){length=l;}
public static void main(String arg[]){
Sample s1,s2,s3;
s1=new Sample(21L);
s2=new Sample(21L);
s3=s2;
long m=21L;
}
}
哪个表达式返回true。
A.s1==s2;
B.s2==s3;
C.m==s1;
D.s1.equals(m).
答案b
前面已经叙述过==操作符和String的equals()方法的特点,另外==操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
25.给出下面有关List的表达式:(多选题)
List l=new List(6,true);
哪些叙述是对的。
A.在没有其它的约束的条件下该列表将有6行可见。
B.一行的最大字符数是6
C.列表将允许用户多选。
D.列表只能有一项被选中。
答案ac
List组件的该构造方法的第一个参数的意思是它的初始显式行数,如果该值为0则显示4行,第二个参数是指定该组件是否可以多选,如果值为true则是可以多选,如果不指定则缺省是不能多选。