1. 程式代碼
public class Test {
private String name = "abc";
public static void main(String[] args) {
Test test = new Test();
Test testB = new Test();
String result = test.equals(testB) + ",";
result += test.name.equals(testB.name) + ",";
result += test.name == testB.name;
System.out.println(result);
}
}
2. 運行結果決議
運行結果:false,true,true
作為成員變數的name是使用字面值直接賦值的(private String name=“abc”)這種賦值的執行程序是先看字串常量池中有沒有value陣列為[‘a’,‘b’,‘c’]的String物件,如果沒有的話就創建一個,有的話就拿到他的一個參考
name沒有被static修飾,所以每實體化一個物件都會執行private String name=“abc”,第一次執行的時候發現字串常量池沒有value陣列為[‘a’,‘b’,‘c’]的String物件,所以創建一個,拿到他的一個參考,但是第二次的時候發現已經有了這樣的物件了,所以只是拿到這個物件的一個參考而已
執行 test.name == testB.name 的時候比較的是兩個 name 指向的記憶體是不是同一個(比較參考本身沒有意義),所以test.name==testB.name的結果也是true
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/171768.html
標籤:其他
