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
假設上面的代碼運行。
「無記憶差異」。是的,有。在第一種情況下,val會放在堆棧上,當showBoard終止時釋放。第二,它們構成了類的一部分,並且(在大多數情況下)將最終堆在堆上 - 只有當對象存在時纔會被釋放。在某些情況下,這可能也會對性能產生影響。第二個也不是線程(或者甚至遞歸調用)也是安全的。 –
由於我同意穆拉特回答的後半部分,我也同意保羅的評論。可變狀態(var)是不安全的,並且null實例可能會在將來導致問題。而且價值的範圍也必須考慮在內。很好的洞察力,謝謝你們!我寫了第一個場景,第二個場景只是對這個問題的假設。 –