1. 程式人生 > >晨考總結第四天

晨考總結第四天

登錄 布爾值 新生代 兩種 運算 順序 name 表達式 異常

(1) &和&&的區別?

  &運算符有兩種用法:

  (1)按位與;(2)邏輯與。&&運算符是短路與運算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運

算符左右兩端的布爾值都是true整個表達式的值才是true。&&之所以稱為短路運算是因為,如果&&左邊的表達式的值是false,右邊
的表達式會被直接短路掉,不會進行運算。

  很多時候我們可能都需要用&&而不是&,例如在驗證用戶登錄時判定用戶名不是null而且

不是空字符串,應當寫為:username != null &&!username.equals(""),二者的順序不能交換,更不能用&運算符,因為第一個條件
如果不成立,根本不能進行字符串的equals比較,否則會產生NullPointerException異常。

  註意:邏輯或運算符(|)和短路或運算符(||)的差別也是如此。


(2) 解釋內存中的棧(stack)、堆(heap)和方法區(method area)的用法。

  通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用JVM中的棧空間;

而通過new關鍵字和構造?創建的對象則放在堆空間,堆是垃圾收集?管理的主要區域,由於現在的垃圾收集?都采用分代收集算法,所以堆空間

還可以細分為新生代和老生代,再具體一點可以分為Eden、Survivor(又可分為From Survivor和To Survivor)、Tenured;方法區和
堆都是各個線程共享的內存區域,用於存儲已經被JVM加載的類信息、常量、靜態變量、JIT編譯?編譯後的代碼等數據;

  程序中的字面量(literal)如直接書寫的100、"hello"和常量都是放在常量池中,常量池是方法區的一部分,。棧空間操作起來最快但是棧很小,

通常大量的對象都是放在堆空間,棧和堆的大小都可以通過JVM的啟動參數來進行調整,棧空間用光了會引發StackOverflowError,
堆和常量池空間不足則會引發OutOfMemoryError

晨考總結第四天