1
指出下列程序运行的结果:
public class Example{
String str=new String("tarena");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str="test ok";
ch[0]='g';
}
}
复制代码
正确答案: tarena and gbc
由于 string 和 char 数组都是引用类型,调用方法时传递的是引用,如下图所示
按道理修改 str 和 ch 时会影响原来的值,但是由于 string 是不可变的, 对 string 的修改实际 上是 new
了-个新对象(这也是 string 和 stringbuffer 的区别, stringbuffer 的底层是 char 数组, 所以可以直
接修改), 而对 char 数组的修改则会影响原值。所以如下图。
2
指出下列程序运行的结果:
public static void main(String args[]) {
List Listlist1 = new ArrayList();
Listlist1.add(0);
List Listlist2 = Listlist1;
System.out.println(Listlist1.get(0) instanceof Integer);
System.out.println(Listlist2.get(0) instanceof Integer);
}
复制代码
List集合中的元素必须是对象。 Listlist1.add(0); JDK1.5之后支持自动装箱(int类型自动装箱成Integer),编译通过。
instanceof:前一个参数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是一个接口, 它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。
List没有使用泛型,说明使用get(0)取出的元素的编译类型Object型的, 但运行时类型是 Integer。所以打印true。这边体现了多态。 而Listlist1把引用赋给了List list2,说明两个指向同一个对象。第二个打印的也是true
复制代码
3
以下程序的输出结果为
class Base{
public Base(String s){
System.out.print("B");
}
}
public class Derived extends Base{
pub1ic Derived (String s) {
System.out.print("D");
}
public static void main(String[] args){
new Derived("C");
}
}
复制代码
BD
DB
C
编译错误 ------------>正确答案
子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
public Derived(String s){
super("s");
System.out.print("D");
}
上面这些题目来源于牛客网,自己也是刚开始做,分享的题目可能我并没有做错,但是也是给我带来了收获的题目,题解也是挑的下面牛友写的好一些的题解,希望大家有所收获。最近在突然想起来过几天就考六级了,呃呃呃,还剩十几天就考了,之前也没准备过,四级当时也没准备,压线过的,就想着报都报了就准备一下吧,毕竟不想白送钱,所以这两天忙着背单词,就只能每天做几个简单基础题或者算法题了……
评论