JAVA笔试题常见坑_java笔试题中的坑

1.请选择下面代码正确的输出选项(C)

public class Tests {

public static void main(String[] args) {

String f1 = "Study";

String f2 = "Stu"+"dy";

String f3 = "Stu"+new String("dy");

System.out.println(f1==f2);

System.out.println(f1==f3);

System.out.println(f2==f3);

}

}

A.true,false,false B.false,true,false

C.true,false,false D. true,true,false

解析:众所周知new出来的对象会被放到堆内存中,而“==”是对地址的比较。而如果是两个字符串“+”在编译器就会合成一个字符串相当于直接创建一个完整的字符串。

0979fe7600b54e91af6cfe4e3f7d36b4.png

2.下面关于构造器的说法正确的是(D)

A.在一个类中构造器是不可以省略的

B.构造器的名字必须与类名一致,而方法名不能和类名一致

C.一个类只能定义一个构造器

D.构造器在new对象是被执行

解析:在类中构造器可以省略不写,普通方法名是可以和类名一致的。类中可以创建多个构造函数。

84b0f233fe745d8d32f1d333367e738f.png

3.当向集合中存放20个数据时 ArrayList arrayList 1= new ArrayList()和ArrayList arrayList2 = new ArrayList(16)这两个集合分别扩容了(A)次

A.2,1 B. 1,0

C.1,1 D. 2,2

解析:在没有给定集合初始大小时new一个ArrayList相当于创建一个Object类型初始大小为10的数组,所以arrayList 1需要进行扩容,每次的增量为原来的一半如果除不整向下整。所以arrayList1需要扩容2次。而arrayList2已经给定初始值16那么它只需要扩容一次。

69316a7a70723f07b0a8d0d39791ae70.png

4.下面代码的输出结果为(C)

public class Student {

private int age;

private String name;

public Student(String name){

this.name=name;

}

}

public class Test01{

public void changeAge(int age){

age = 20;

}

public void changeName(Student student){

student.setName("GG");

}

public void changeString(String string){

string="NN";

}

}

public class Test {

public static void main(String[] args) {

Test01 test01 = new Test01();

Student student = new Student("gg");

int age = 10;

String string = "nn";

test01.changeAge(age);

test01.changeName(student);

test01.changeString(string);

System.out.println(age+"=="+student.getName()+"=="+string);

}

}

A.20==gg==nn B. 10==GG==nn

C .10==GG==nn D. 10==gg==NN

解析:对于基本数据类型age而言,在类Test01的changeAge里的age的作用域只是当前的changeAge方法如果你在个方法里输出age就是20,就相当于我通过方法的调用只是传个值给你,你要怎么修改并不会影响到我本身。

在java中只存在值的传递,但是在不是字符串的引用数据类型中我们可以理解为引用的传递,对该引用(地址)指向的值的修改会影响到任何使用到他的地方。所以第二个会输出GG。

对于字符串而言,他一经创建值永不可变。所以对于字符串而言一经修改就相当于创建了一个新的字符串。再根据作用域的不同可知第三个输出nn

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值