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 中的异常处理
- 什么是检查异常
- 什么是运行时异常
- 异常类的继承架构