1.java中常见的数据类型有哪些?
java中常见的数据类型有8种。byte字节型,内存中占一个字节;short短整型,占两个字节;int整型,占4个字节;long长整型,占8个字节。
float单精度浮点型,占4个字节;double双精度浮点型,占8个字节。
char字符型,占2个字节;boolean布尔型
2.java语言的优势有哪些?
- 面向对象(封装,继承,多态)
- 可靠性
- 安全性
- 平台无关性(java虚拟机实现)
- 支持多线程
- 支持网络编程
- 执行方式为解释型执行+编译执行并存
3.说明jdk1.8之后的变化
(1)增加了lambda表达式
(2)接口中增加了默认方法和静态方法
(3)HashMap结构由数组+链表转为红黑树
4.说说JDK、JRE、JVM三者之间的关系
使用JDK编写java程序后,通过JDK的编译程序javac将程序编译为字节码文件。在JRE上运行这些字节码文件,JVM会解析并映射到真实操作系统的CPU指令集和OS的系统调用。
5.==和equals()的区别?
(1)==是运算符,用于基本类型是比较值,用于引用类型是比较内存地址
(2)equals()是object类中的方法。基本数据类型没有重写equals()方法,默认使用object中的方法,采用 ==比较内存地址;引用类型重写了equals方法,进行值或内存的比较,例如String类。
6.java是按值传递还是按引用传递?
值传递是指在调用方法时,将实际参数的值或内存地址复制一份传递到方法中;引用传递是指在调用方法时,将参数的内存地址直接传递到方法中。
java中使用的都是值传递。如果是基本类型,赋值参数的值传递给方法;如果是引用类型,赋值对象参数的Heap堆中的内存地址值,传递给方法。
7.String类中有哪些常用方法?
- indexOf() 返回指定字符的索引
- charAt() 返回指定索引对应的字符
- length() 返回字符串长度
- replace() 替换字符
- spilt() 分割字符串
- trim() 去掉两端的空格
- substring() 截取字符串
- toUpperCase() 转大写
- toLowerCase() 转小写
- equals() 字符串比较
- getBytes() 得到byte型的数组
8.String、StringBuffer、StringBuilder三者之间的区别?
(1)String 被final修饰,是不变的。每次操作都会生成新的String对象,然后指针指向新的String对象。
(2)StringBuffer和StringBuilder都继承自AbstractStringBuilder父类,使用char型数组存储,没有被final修饰,所有可以在原有对象的基础上进行操作。
(3)每次对String类进行操作都会生成新的对象,性能和内存开销都会很大。
(4)StringBuilder和StringBuffer都是在原有基础上操作,不会生成新的对象,性能开销较小。
9.StringBuilder和StringBuffer之间有什么区别?
(1)StringBuffer对操作方法加了同步锁,所以线程是安全的。
(2)StringBuilder并没有对操作方法加同步锁,所以线程不安全。
(3)相同情况下,使用StringBuilder比使用StringBuilder会获得百分之10-百分之15的性能提升,但需要承担多线程不安全的风险。
10.String、StringBuilder、StringBuffer三者使用场景?
- 字符串少量修改,使用String
- 单线程频繁修改,使用StringBuilder
- 多线程频繁修改,使用StringBuffer
11.final关键字的用法?
- final修饰的类为最终类,不能被继承
- final修饰的方法为最终方法,不能被重写
- final修饰的变量叫常量,常量必须初始化,且不能被修改(基本类型不能被修改,引用类型不会再分配内存空间)
12.final、finally、finalize的区别?
- final用于声明变量、方法和类,分别表示常量、不能被重写、不能被子类继承
- finally是异常处理语句处理的最后一部分,表示不论怎样都会被执行
- finalize是object的方法,在垃圾回收器执行的时候,会调用被回收对象的该方法,供垃圾收集时执行其他资源回收等操作。