2015-11-26 49 views
1

只是出於好奇,正如標題重新聲明之間內存:是否有任何性能或內存分配的差異,如果變量聲明和實例化這樣的:斯卡拉演出時間/重新初始化和變量

class someClass 
    def showBoard(typeIs: String){ 
     if (typeIs == "animals"){ 
      val dir: File = new File("animals/"); 
      val blah1= ...; 
      val blah3 = ...; 
     } 
     else if (typeIs == "sports"){ 
      //same variables 
     } 
     //same for other categories 

而不是這樣的:

class someClass 
    var dir: File = null 
    var blah = null 
    var blah2 = null 
    def showBoard(typeIs: String){ 
     if (typeIs == "animals"){ 
      dir = new File("animals/"); 
      blah = ...; 
      blah2 = ...; 
     } 
     else if (typeIs == "sports"){ 
      //same variables 
     } 
     //same thing for the other categories 

假設上面的代碼運行。

回答

0

不,沒有表現或記憶差異。但在設計和慣用scala代碼方面 - 可變狀態是不好的。更好地使用第一個。

+1

「無記憶差異」。是的,有。在第一種情況下,val會放在堆棧上,當showBoard終止時釋放。第二,它們構成了類的一部分,並且(在大多數情況下)將最終堆在堆上 - 只有當對象存在時纔會被釋放。在某些情況下,這可能也會對性能產生影響。第二個也不是線程(或者甚至遞歸調用)也是安全的。 –

+0

由於我同意穆拉特回答的後半部分,我也同意保羅的評論。可變狀態(var)是不安全的,並且null實例可能會在將來導致問題。而且價值的範圍也必須考慮在內。很好的洞察力,謝謝你們!我寫了第一個場景,第二個場景只是對這個問題的假設。 –