什么是面向对象?谈谈你对面向对象的理解
- 谈跟面向过程的区别
- 谈面向对象的三大特性
JDK、JRE、JVM三者的区别和联系
- 谈三者分别是啥
- 谈包含关系
== 和 euqals的区别
- == 既能比较基本数据类型(比较值)也能比较引用数据类型(比较内存地址)
equqls方法属于Object类,没有重写默认也是==,
我们看到的String等类等equals方法是被重写过的,容易形成equals就是比较值的误区。
@Test
public void test222() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j); //false
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;
Integer y = 128;
System.out.println(x == y);//false
Integer a = 127;
Integer b = 127;
System.out.println(a == b);//true -128~127
}
简述final作用
- final 表示最终的
- 修饰类、方法、变量
为什么局部内部类和匿名内部类只用访问局部final变量
- 首先内部类和外部类是同一个级别 编译之后会生成两个class文件
- 外部类结束,局部变量就会被销毁,但内部类可能还持有引用,这就形成矛盾
- 所以实际上我们是将局部变量复制了一份作为内部类的成员变量,
- 为了保持一致性,我们将局部变量设置为final,保证建立的拷贝一致。
String、StringBuffer、StringBuilder区别和使用场景
不能回答考虑线程安全就用StringBuffer 不考虑就用StringBuilder
1基本点
String:不可变的字符序列;底层使用final char[]存储
StringBuffer:可变的字符序列;线程安全的(所有方法用synchronized修饰),效率低。底层使用char[]存储
StringBuilder:可变的字符序列;JDK1.5才新增;线程不安全的,效率高;底层使用char[]存储
**
2从源码上看
StringBuffer和StringBuilder底层创建的是一个“value”+16大小的char数组,(默认16大小,或者指定)
而且这个数组是可扩容的。扩容一般为原来的2倍+2,int newCapacity = (value.length << 1) + 2;
特殊情况2种:有一种是扩大两倍还不够的,就直接以if (newCapacity - minCapacity < 0) { newCapacity = minCapacity;
}``它本身作最大值了
还有一个小点,Buffer和Builder可以用append(String s = null),即可以存,父类有一个方法判断null的话把null作为4个字符存入。
3 指导意义:开发过程中,如果我们明确知道可能频繁修改且长度超过16,建议大家使用StringBuffer(int capacity) 指定扩容长度
Ps:一个需要注意的点,虽然给Buffer和Build分配的空间是16,但是这不意味着length()方法是16,他输出的其实类似于total
重载和重写的区别
注意一点:方法的返回值和访问修饰符可以不同,但是他们的不同不构成方法的重载。
接口和抽象类的区别
List和Set的区别与联系 待复习
- 都继承Collection接口
- 区别有序可重复 无序不可重复
- list适合追加, 插入,删除,效率低
- set适合随机存储,插入删除,但是遍历时效率低
hashCode与equals
ArrayList和LinkedList区别
- 底层是什么实现,存储空间,适合干啥
- 缺点
拓展