資料內(nèi)容:
1. JDK 和 JRE 有什么區(qū)別?
• JDK:Java Development Kit 的簡稱,Java 開發(fā)工具包,提供了
Java 的開發(fā)環(huán)境和運行環(huán)境。
• JRE:Java Runtime Environment 的簡稱,Java 運行環(huán)境,為
Java 的運行提供了所需環(huán)境。
具體來說 JDK 其實包含了 JRE,同時還包含了編譯 Java 源碼的編譯器
Javac,還包含了很多 Java 程序調(diào)試和分析的工具。簡單來說:如果你需
要運行 Java 程序,只需安裝 JRE 就可以了,如果你需要編寫 Java 程序,
需要安裝 JDK。
2. == 和 equals 的區(qū)別是什么?
== 解讀
對于基本類型和引用類型 == 的作用效果是不同的,如下所示:
• 基本類型:比較的是值是否相同;
• 引用類型:比較的是引用是否相同;
代碼示例:
String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
代碼解讀:因為 x 和 y 指向的是同一個引用,所以 == 也是 true,而
new String()方法則重寫開辟了內(nèi)存空間,所以 == 結(jié)果為 false,而
equals 比較的一直是值,所以結(jié)果都為 true。
equals 解讀
equals 本質(zhì)上就是 ==,只不過 String 和 Integer 等重寫了 equals 方
法,把它變成了值比較。看下面的代碼就明白了。
首先來看默認(rèn)情況下 equals 比較一個有相同值的對象,代碼如下:
class Cat {
public Cat(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false
輸出結(jié)果出乎我們的意料,竟然是 false?這是怎么回事,看了 equals
源碼就知道了,源碼如下:
public boolean equals(Object obj) {
return (this == obj);
}
原來 equals 本質(zhì)上就是 ==。那問題來了,兩個相同值的 String 對象,為什么返回的是 true?代碼如
下: