1.final关键词有什么作用?
final关键字可以用来修饰局部变量,成员变量,方法和类。
特点:凡是引用final关键字的地方皆不可修改!
(1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改. 但是该内存地址中保存的对象信息, 是可以进行修改的.
final 变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
2.java中=和equals的区别
java中的==和equals()最大的区别是:一个是运算符,一个是方法。 ==操作符专门用来比较变量的值是否相同,对于基本数据类型比较值,对于引用类型对象比较指向的内存地址。 eqauls本质是也是通过==实现的,但目前equals方法常用来比较对象的内容是否相同。那是因为许多类,如果String,Integer等,通过重写equals来实现对对象内部数据的相等判断。
3.ArrayList 和 Array 有什么区别?
Array和ArrayList都可以用来存储多个元素,但它们有以下区别: 数组是一种基本的数据结构,它在内存中分配一段连续的空间,用于存储同一类型的元素。 而ArrayList是Java集合框架中的一种动态数组,它是基于数组实现的,可以动态地增加或删除元素,因此它的长度可以根据需要自动调整。
ArrayList不能存储基础数据类型,只能存储类对象。
Array都内置了length变量,而ArrayList通过size函数获得数组长度。
Array可以直接通过下标访问数据,而ArrayList需要调用get函数。
4.ArrayList的扩容机制
扩容的主体过程在grow函数里面,每次扩容为原容量的1.5倍左右,如果还没有达到要求则会直接扩容到hugeCapacity。然后使用Arrays.copy函数将原数组复制到扩容后的新数组中。初始化中为指定ArrayList容量使用默认值10。
/**
- 扩容 ArrayList 的方法,确保能够容纳指定容量的元素
- @param minCapacity 指定容量的最小值
*/
private void grow(int minCapacity) {
// 检查是否会导致溢出,oldCapacity 为当前数组长度
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容至原来的1.5倍
if (newCapacity - minCapacity < 0) // 如果还是小于指定容量的最小值
newCapacity = minCapacity; // 直接扩容至指定容量的最小值
if (newCapacity - MAX_ARRAY_SIZE > 0) // 如果超出了数组的最大长度
newCapacity = hugeCapacity(minCapacity); // 扩容至数组的最大长度
// 将当前数组复制到一个新数组中,长度为 newCapacity
elementData = Arrays.copyOf(elementData, newCapacity);
}
8万+

被折叠的 条评论
为什么被折叠?



