JavaSE之Java基础(3)
11、什么是值传递和引用传递?
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用被传递给方法中对应的形式参数,方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
12、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
区别:
- 数组的大小是固定的,列表的大小是动态变化的;
- 数组在声明的同时必须进行实例化(至少得初始化数组的大小),列表可以只是先声明,之后再进行实例化;
- 数组可以存储基本类型和对象类型,列表只能存储对象类型(存储基本类型要用包装类);
- 数组只能存储同一类型的数据,列表可以存放不同类型的数据(在没有声明泛型具体类型的情况下);
使用选择:
- 如果想要保存一些在整个程序运行期间都会存在而且不变的数据,可以使用一个全局数组;
- 如果只是单纯想要以数组的形式保存数据,而不对数据进行增加、删除等操作,只是为了方便进行查找的话,可以使用ArrayList,如果需要对元素进行频繁的移动或删除,或者是处理超大量的数据,使用ArrayList就不合适了,因为它的效率很低,可以选择使用LinkedList。
13、你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?
大O符号描述了当数据结构里的元素增加的时候,算法的规模或性能在最坏的情况下有多好。
比如数组的插入时间复杂度为O(N),空间复杂度为O(1);链表的插入时间复杂度为O(1),空间复杂度为O(1)。
14、String是最基本的数据类型吗?
不是,String是引用类型;String类是final的,不能被继承,不能被修改;
Java的基本类型只有八个:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字节)、boolean。
15、int 和 Integer 有什么区别
- int是Java的基本类型,Integer是int的包装类,是引用类型;
- int的默认值为0,Ingeter的默认值为null。
java在编译Integer i = 128的时候,被翻译成Integer i = Integer.valueOf(128),而valueOf()函数会对-128到127之间的数进行缓存,如果在缓存中,就不会新建一个对象,否则,新建一个对象;
同样适用于Byte、Short、Integer、Long、Character,其中Character缓存的是0到127之间的数;
public class Java8Tester { public static void main(String args[]) { Integer i1 = 127; Integer i2 = 127; System.out.println(i1==i2); } } //结果为:true
public class Java8Tester { public static void main(String args[]) { Integer i1 = 128; Integer i2 = 128; System.out.println(i1==i2); } } //结果为:false
int类型和Integer类型比较,会把Integer自动拆箱为int再去比,所以,只要值相同,两者就是相同的。
public class Java8Tester { public static void main(String args[]) { Integer i1 = 99999; int i2 = 99999; System.out.println(i1==i2); } } //结果为:true