分为基本数据类型和引用数据类型。
基本数据类型包括:数值型(byte、short、int、long、float、double),字符型(char)以及布尔型(boolean)。除了基本类型外,其他数据类型都属于引用类型,包括类、接口、数组等。
有问题,因为 3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型,可能会造成精度损失,所以必须进行强制类型转换,正确的写法是 float number =(float)3.4;/ float number =3.4F;
。
使用 +
直接拼接,String 是 final 对象,不会被修改,每次使用 +
进行拼接都会创建新的对象,而不是改变原来的对象,效率低,是线程安全的。
使用 StringBuffer
可变字符串,效率较高,是线程安全的(StringBuffer
的方法使用了 synchronized
关键字进行修饰)。
使用 StringBuilder
可变字符串,效率最高,但是线程不安全。
final
可以修饰类、方法和变量,被 final
修饰的类不可继承,被 final
修饰的方法不可重写,被 final
修饰的变量引用不可更改,引用的内容可以更改。
finally
用于 try-catch
代码块中,无论是否发生异常最后都将执行,作用是释放资源。
finalize
是 Object 类的方法,在对象被垃圾回收之前将调用一次,一般用于资源的释放。
如果是引用类型,==
比较的是两个对象的引用是否完全相同,如果是基本类型,比较的是两个基本类型的数值是否相同。
如果没有重写的话,equals
默认按照 ==
进行比较,如果重写了 equals()
方法,则按照对应的比较规则比较。
两个对象如果相等,那么它们的 hashCode 值必须相等,但两个对象的 hashCode 值相等时,它们不一定相同。
参考文章: 【7 万字干货】2021Java 实习必看面试两百题解析