Java实习面试(二)
如何避免空指针,如何排错空指针
避免空指针:
- 可以用常量与字符串进行对比,此时常量应该放前面。常量.eqluals(字符串)
- 对象初始化的时候实现默认构造函数或者给定初始值
- 例如返回集合时,判断结果是否为null之后返回一个空集合
- 使用Java中的断言来检查条件,但是很少使用Java中的,一般是用spring中的
Optional
JDK1.8之后出现的新特性
想要避免空指针,要注重代码编写规范。
排错空指针(编程中遇到报错怎么解决):
- 报错信息中可以定位到指定代码行
- 通过打断点的方式,进行debug
别再写 bug 了,避免空指针的 5 个案例! - Java技术栈的文章 - 知乎
打破你的认知!Java空指针居然还能这样玩,90%人不知道… - 栈长的文章 - 知乎
==和equals有什么区别
对于基本数据类型,应该使用==
进行比较,这时候==
比较的是他们的值
对于引用数据类型,这时候用==
进行比较的话,比较的是他们的地址值
此时,如果是不同的new出来的对象,那么地址值不同,比较结果也不同
equals方法来自Object类,所有类都继承了Object
equals在Object类中,比较的也是地址值
所以此时跟==
作用相同
但是不同类可以重写属于自己的equals方法。达到比较两者值的效果。
比如String类中重写的equals就可以比较两者的值。因为重写之后的equals把两个比较的字符串变成了字符数组,然后用==
依次比较。
这次彻底搞懂Java中equals和==的区别 - 蛙课网的文章 - 知乎
final关键字作用
final修饰类的时候:
- 不能修饰抽象类和接口
- 被final修饰的类不能被继承:String
final修饰属性:
- 必须赋初始值
- 如果没有赋初始值,必须在构造器里面赋值
- 被final修饰的属性是不可以被修改的
final修饰方法:
- 被修饰的方法必须有实现代码
- 方法是不能被重写的
final修饰形参
- 被修饰的形参也不可以再修改值
一般final和static一起使用,来定义常量
static修饰符和final修饰符的用法 - 不念旧情的文章 - 知乎
StringBuilder和StringBuffer有什么区别
StringBuffer几乎对所有的方法都实现了同步,所以是线程安全的。
StringBuilder则没有实现同步,所以是线程不安全的。
比如重写append方法的时候,StringBuffer添加了synchronized关键字修饰。而StringBuilder则没有。
所以多线程的时候不能用StringBuilder。
但是正是因为StringBuffer使用了同步,所以导致它的运行效率会慢。
所以在不需要考虑线程安全的时候推荐使用StringBuilder,以达到更快的运行速度。
参加了这么多面试,还是不懂StringBuffer和StringBuilder的区别? - 蛙课网的文章 - 知乎