3道Java基础题

发布于:2022-12-25 ⋅ 阅读:(132) ⋅ 点赞:(0)

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");
}

上面这些题目来源于牛客网,自己也是刚开始做,分享的题目可能我并没有做错,但是也是给我带来了收获的题目,题解也是挑的下面牛友写的好一些的题解,希望大家有所收获。最近在突然想起来过几天就考六级了,呃呃呃,还剩十几天就考了,之前也没准备过,四级当时也没准备,压线过的,就想着报都报了就准备一下吧,毕竟不想白送钱,所以这两天忙着背单词,就只能每天做几个简单基础题或者算法题了……

 


网站公告

今日签到

点亮在社区的每一天
去签到