final、finally、finalize的区别?


== 和 equals() 的区别?

:::success 一、回顾 == 的使用:
== :运算符

    1. 可以使用在基本数据类型变量和引用数据类型变量中
    1. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)

    如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用 是否指向同一个对象实体
    * 补充: == 符号使用时,必须保证符号左右两边的变量类型一致。

二、equals()方法的使用:

    1. 是一个方法,而非运算符
    1. 只能适用于引用数据类型
    1. Object类中equals()的定义:

public boolean equals(Object obj){
return (this == obj)
}
* 说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体

    1. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的”实体内容”是否相同。
    1. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的”实体内容”是否相同。那么,我们就需要对Object类中的equals()进行重写.

    *重写的原则:比较两个对象的实体内容是否相同。 :::


多态是编译时行为还是运行时行为?

image.png

  1. package com.atguigu.test;
  2. import java.util.Random;
  3. //面试题:多态是编译时行为还是运行时行为?
  4. //证明如下:
  5. class Animal {
  6. protected void eat() {
  7. System.out.println("animal eat food");
  8. }
  9. }
  10. class Cat extends Animal {
  11. protected void eat() {
  12. System.out.println("cat eat fish");
  13. }
  14. }
  15. class Dog extends Animal {
  16. public void eat() {
  17. System.out.println("Dog eat bone");
  18. }
  19. }
  20. class Sheep extends Animal {
  21. public void eat() {
  22. System.out.println("Sheep eat grass");
  23. }
  24. }
  25. public class InterviewTest {
  26. public static Animal getInstance(int key) {
  27. switch (key) {
  28. case 0:
  29. return new Cat ();
  30. case 1:
  31. return new Dog ();
  32. default:
  33. return new Sheep ();
  34. }
  35. }
  36. public static void main(String[] args) {
  37. int key = new Random().nextInt(3);
  38. System.out.println(key);
  39. Animal animal = getInstance(key);
  40. animal.eat();
  41. }
  42. }
  1. package com.atguigu.test;
  2. //考查多态的笔试题目:
  3. public class InterviewTest1 {
  4. public static void main(String[] args) {
  5. Base base = new Sub();
  6. base.add(1, 2, 3);
  7. // Sub s = (Sub)base;
  8. // s.add(1,2,3);
  9. }
  10. }
  11. class Base {
  12. public void add(int a, int... arr) {
  13. System.out.println("base");
  14. }
  15. }
  16. class Sub extends Base {
  17. public void add(int a, int[] arr) {
  18. System.out.println("sub_1");
  19. }
  20. // public void add(int a, int b, int c) {
  21. // System.out.println("sub_2");
  22. // }
  23. }

关于包装类使用的面试题

image.png
image.png

  1. package com.atguigu.java2;
  2. import org.junit.Test;
  3. /*
  4. * 关于包装类使用的面试题
  5. *
  6. *
  7. */
  8. public class InterviewTest {
  9. @Test
  10. public void test1() {
  11. Object o1 = true ? new Integer(1) : new Double(2.0);
  12. System.out.println(o1);// 1.0
  13. }
  14. @Test
  15. public void test2() {
  16. Object o2;
  17. if (true)
  18. o2 = new Integer(1);
  19. else
  20. o2 = new Double(2.0);
  21. System.out.println(o2);// 1
  22. }
  23. @Test
  24. public void test3() {
  25. Integer i = new Integer(1);
  26. Integer j = new Integer(1);
  27. System.out.println(i == j);//false
  28. //Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
  29. //保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
  30. //-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率
  31. Integer m = 1;
  32. Integer n = 1;
  33. System.out.println(m == n);//true
  34. Integer x = 128;//相当于new了一个Integer对象
  35. Integer y = 128;//相当于new了一个Integer对象
  36. System.out.println(x == y);//false
  37. }
  38. }