我目前正在使用大量的嵌套級別對象,並且正在考慮性能。Java - 嵌套級別對象分配
所以我們可以說,我有以下類別:
class Address {
private String doorNumber;
private String street;
...
}
和其他類客戶。
class Customer {
private List<Address> addressList;
private String firstName;
.....
.....
.....
}
,當我嘗試訪問它象下面這樣:
public static void main(String[] str) {
Customer customer = new Customer();
// ... and add addresses to this Customer object.
// Set 1
// And if I then do...
customer.getAddressList().get(0).getHouseNumber();
customer.getAddressList().get(0).getStreet();
// OR
// Set 2
Address address = customer.getAddressList().get(0);
address.getHouseNumber();
address.getStreet()
}
我所知道的第一組線訪問地址是不乾淨的代碼,而我認爲,編譯器會排序了這一點,但它沒有。因爲當我反編譯我的代碼時,我得到了完全相同的東西,所以我不確定編譯器是否在那裏進行任何優化。所以我的第一個問題是編譯器爲什麼不清理它並將其分配給一個臨時變量?
而我的下一個問題是,這與性能有關嗎?除了第一個不是非常乾淨的代碼之外,哪一個是這兩個代碼中性能最好的代碼。這是否意味着,我的第二套代碼行將在編譯期間內部翻譯成第一行代碼?
最後最後一個,調用類的變量比它的getter方法更優化嗎?我只是在沒有清晰編碼的情況下考慮性能。
第二個版本性能會更好,尤其是當addressList是LinkedList <>或其他'List <>'其中'get'不是'O(1)'時。 (假設你會比第一個元素挖得更深。) – bradimus
Thanks @bradimus。我的想法是,我必須勤於變量賦值還是Java編譯器要做什麼優化?我不確定。 –
您可以通過基準測試來檢查自己的表現。在循環中運行代碼幾次,然後用'System.nanoTime()'測量時間。 –