- 局部变量存储于栈内存;static的成员变量存储于方法区,不是static的成员变量存储于堆内存
- 实例变量的默认值:
- byte、short、int:0
- long:0L
- float:0.0F
- double:0.0
- char:’\u000’
- boolean:false
- 如何对Integer和Double类型判断相等
- 先转换为相同的基本类型再使用==
- int和Integer有什么区别,二者在做==运算时会得到什么结果?
- 二者在做==运算时,Integer会自动拆箱为int类型,然后再进行比较
- 对多态的理解
- 相同类型的变量、调用同一个方法时呈现出多种不同的行为特征
- 多态可以提高程序的可扩展性,在设计程序时让代码更加简洁而优雅。
- 把String设计成final的原因
- 安全:String被广泛使用
- 多线程中不需要同步的操作
- 性能:不变性保证了hashcode的唯一,加强了容器中利用String的效率
- 字符串常量池才有意义,节约内存
- 使用字符串时,new和””推荐使用哪种方式?
- 采用new的方式会多创建一个对象出来,会占用更多的内存,所以一般建议使用直接量的方式创建字符串。
- 两个字符串相加的底层是如何实现的
- 如果拼接的都是字符串直接量,则在编译时编译器会将其直接优化为一个完整的字符串,和你直接写一个完整的字符串是一样的。
- 如果拼接的字符串中包含变量,则在编译时编译器采用StringBuilder对其进行优化,即自动创建StringBuilder实例并调用其append()方法,将这些字符串拼接在一起。
- 静态内部类需要满足的规则
- 静态内部类可以包含静态和非静态成员
- 不能访问外部类的实例成员,只能访问它的静态成员
- 外部类的所有方法、初始化块都能访问其内部定义的静态内部类;
- 在外部类的外部,也可以实例化静态内部类
- 说一说你对泛型的理解
- 有了泛型以后,集合自动记住所有集合元素的数据类型,从而无须对集合元素进行强制类型转换。
- 泛型擦除
List<String> list1 = ...;
List list2 = list1;
- 说一说你对Java反射机制的理解
通过反射机制,我们可以实现如下的操作:- 程序运行时,可以通过反射获得任意一个类的Class对象,并通过这个对象查看这个类的信息;
- 程序运行时,可以通过反射创建任意一个类的实例,并访问该实例的成员;
- 程序运行时,可以通过反射机制生成一个类的动态代理类或动态代理对象。
- Java反射在实际项目中有哪些应用场景?
- 使用JDBC时通过反射机制加载数据库的驱动程序;
- 注解/XML配置
- 面向切面编程(AOP)的实现方案,是程序运行时创建目标对象的代理类