資料內(nèi)容:
1. JDK 和 JRE 有什么區(qū)別?
• JDK:Java Development Kit 的簡(jiǎn)稱(chēng),Java 開(kāi)發(fā)工具包,提供了
Java 的開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境。
• JRE:Java Runtime Environment 的簡(jiǎn)稱(chēng),Java 運(yùn)行環(huán)境,為
Java 的運(yùn)行提供了所需環(huán)境。
具體來(lái)說(shuō) JDK 其實(shí)包含了 JRE,同時(shí)還包含了編譯 Java 源碼的編譯器
Javac,還包含了很多 Java 程序調(diào)試和分析的工具。簡(jiǎn)單來(lái)說(shuō):如果你需
要運(yùn)行 Java 程序,只需安裝 JRE 就可以了,如果你需要編寫(xiě) Java 程序,
需要安裝 JDK。
2. == 和 equals 的區(qū)別是什么?
== 解讀
對(duì)于基本類(lèi)型和引用類(lèi)型 == 的作用效果是不同的,如下所示:
• 基本類(lèi)型:比較的是值是否相同;
• 引用類(lèi)型:比較的是引用是否相同;
代碼示例:
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
代碼解讀:因?yàn)?x 和 y 指向的是同一個(gè)引用,所以 == 也是 true,而
new String()方法則重寫(xiě)開(kāi)辟了內(nèi)存空間,所以 == 結(jié)果為 false,而
equals 比較的一直是值,所以結(jié)果都為 true。
equals 解讀
equals 本質(zhì)上就是 ==,只不過(guò) String 和 Integer 等重寫(xiě)了 equals 方
法,把它變成了值比較。看下面的代碼就明白了。
首先來(lái)看默認(rèn)情況下 equals 比較一個(gè)有相同值的對(duì)象,代碼如下:
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);
}
原來(lái) equals 本質(zhì)上就是 ==。那問(wèn)題來(lái)了,兩個(gè)相同值的 String 對(duì)象,為什么返回的是 true?代碼如
下: