6、==和Equals区别7、String能被继承吗?为什么用final修饰?8、String buffer和String builder区别 9、Final、Finally、Finalize

6、==和Equals区别

(1) ==
如果比较的是基本数据类型,那么比较的是变量的值
如果比较的是引用数据类型,那么比较的是地址值(两个对象是否指向同一块内存)
(2) equals
如果没重写equals方法比较的是两个对象的地址值
如果重写了equals方法后我们往往比较的是对象中的属性的内容
equals方法是从Object类中继承的,默认的实现就是使用==

如果重写equals不重写hashCode会怎样

6、==和Equals区别7、String能被继承吗?为什么用final修饰?8、String buffer和String builder区别 9、Final、Finally、Finalize_第1张图片

6、==和Equals区别7、String能被继承吗?为什么用final修饰?8、String buffer和String builder区别 9、Final、Finally、Finalize_第2张图片

是否出现矛盾???用equals比较说明对象相同,但是在HashMap中却以不同的对象存储(没有重写hascode值,两个hascode值,在他看来就是两个对象)。到底这两个对象相等不相等????说明必须重写hashCode()的重要性,

接下来重写重写equals方法和hashCode方法,再比较

6、==和Equals区别7、String能被继承吗?为什么用final修饰?8、String buffer和String builder区别 9、Final、Finally、Finalize_第3张图片

6、==和Equals区别7、String能被继承吗?为什么用final修饰?8、String buffer和String builder区别 9、Final、Finally、Finalize_第4张图片

7、String能被继承吗?为什么用final修饰?

不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。
• String 类是最常用的类之一,为了效率,禁止被继承和重写。
为了安全。String 类中有很多调用底层的本地方法,调用了操作系统的 API,如果方法可以重写,可能被植入恶意代码,破坏程序。Java 的安全性也体现在这里。

8、String buffer和String builder区别

(1)StringBuffer 与 StringBuilder 中的方法和功能完全是等价的
(2)只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
(3)在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低

9、Final、Finally、Finalize

final:修饰符(关键字)有三种用法:修饰类、变量和方法。修饰类时,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。修饰变量时,该变量使用中不被改变,必须在声明时给定初值,在引用中只能读取不可修改,即为常量。修饰方法时,也同样只能使用,不能在子类中被重写。
finally:通常放在try…catch的后面构造最终执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。
finalize:Object类中定义的方法,Java中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize() 方法可以整理系统资源或者执行其他清理工作。

你可能感兴趣的:(面试,面试)