面经-java
java基础
1. equals和==的区别:
对于基本数据类型,int,double等,“==”号判断两者的数值是否相等,而对于字符串(引用数据类型),如“Hello!”对象,“==”号判断的是两者的指向字符串地址是否相同,如要判断两个字符串其中的每一个字符是否相同,可以用equals()方法。
注意,如果字符串在创建时没有选择重建字符串,那么两个对象指向的字符串地址是一致的,但是如果修改其中一个对象的值,该对象指向的字符串地址会改变,另外一个对象仍旧指向原来的字符串地址没有改变,这是在底层的java逻辑设置中的。但是一开始就是重建两个字符串则不存在这样的问题,就是说即使两个对象创建的字符串相同,这两个对象指向的字符串地址也不一致。
1 | package practiceClass.a0512; |
1 | public class b01_test { |
2. 重写和重载
方法的重写
- 当父类的方法不能满足子类现在的需求时,需要进行方法的重写
- 格式是在重写后的方法上面加上 ‘@Override’ ,该标志是用来校验子类重写的方法格式是否是正确的,当然不加也可以,但最好加上
- 子类的重写方法权限最好用父类的保持一致,当然子类的权限可以大于等于父类
方法的重载
3. 单与运算符&和双与运算符&&的区别
4. 形参和实参
形参是定义通用方法时输入的形式参数,如Person p
而实参是在实际调用这个方法时输入的实际参数,如Student s、Teacher t
5. String,StringBuffer和StringBuilder
特性 | String | StringBuffer | StringBuilder |
---|---|---|---|
是否可变 | 不可变 | 可变 | 可变 |
变量是否跨线程 | 跨 | 跨 | 不跨 |
性能 | 较低(修改创建变量) | 比String高(有线程同步开销) | 较高 |
使用场景 | 字符串内容少量修改 | 多线程环境下同步修改 | 单线程环境下修改 |
因此,在实际开发中
- 如果在多线程环境下频繁操作字符串,可以选择StringBuffer
- 如果是单线程,用StringBuilder
- 如果字符串很少修改,直接使用不可变的String
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.