Java Basic

1 == / equal

== 是一个关键词,用来判断左右两个元素是不是“同一个”:

  • 对于基本类型,比如 int/float 等,会判断他们的值是不是相等
  • 对于引用类型,比如 String/Object 等,会判断他们在内存(堆)中是不是同一片数据

equals 是一个方法,继承自 Object 类,主要用来判断两个 对象 是不是 相等:

  • 这个相等的概念可以定制。默认情况下,使用 == 比较
  • 可以通过在自己的类中,覆写 equals 方法实现

比如,要比较两个字符串相等,正确的语法是:

str1.equals(str2)

那是因为在 String 类中,对 equals 方法进行了如下定制,源码如下:

// 先判断两个字符串是不是“同一个”
// 再逐一比较字符串的每个字符,检查他们是不是“相等”
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

如果我们自己创建的类,也可以定制这种“相等”的规则:

public class Person {
    private String name;
    private String addr;

    // getter/setter/constructor...

    @Override
    public boolean equals(Object o) {
        if(o instanceof Person) { // 首先,要确保比较的对象是一个 Person 对象
            if(((Person) o).getName().equals(this.getName())) { // 其次,我们规定如果两个对象名字相同就“相等”
                return true;
            }
        }
        return false;
    }

    public static void main(String.. args) {
        Person p1 = new Person("tom", "珠海");
        Person p2 = new Person("tom", "上海");
        System.out.println(p1 == p2);       // false
        System.out.println(p1.equals(p2));  // true
    }
}

2 String/StringBuffer/StringBuilder

  • 什么是字符串常量池?
  • 为什么要有这种常量池?
  • String/StringBuffer/StringBuilder 有什么区别?

3 Java 中的异常处理

  • 什么是检查异常
  • 什么是运行时异常
  • 异常类的继承架构

Author: unname

Created: 2019-03-22 周五 01:32

Go ahead, never stop.