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出来的对象会被放到堆内存中,而“==”是对地址的比较。而如果是两个字符串“+”在编译器就会合成一个字符串相当于直接创建一个完整的字符串。
2.下面关于构造器的说法正确的是(D)
A.在一个类中构造器是不可以省略的
B.构造器的名字必须与类名一致,而方法名不能和类名一致
C.一个类只能定义一个构造器
D.构造器在new对象是被执行
解析:在类中构造器可以省略不写,普通方法名是可以和类名一致的。类中可以创建多个构造函数。
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那么它只需要扩容一次。
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