工作后發現,大型的項目里,常常會見到定義字符串使用 private static final String = "abc" 的方式。這種方式有好處嗎?
首先使用直接賦值的字串的方式,字符串會在編譯期生成在字符串池中。
然后final標記的變量(成員變量或局部變量)即成為常量,只能賦值一次。它應該不影響內存的分配。(查看資料多了,說法不一,在下對此也有點懷疑了,如果final影響內存分配,煩請各位大俠告知)
最后看static修飾符:
static修飾符能夠與屬性、方法和內部類一起使用,表示靜態的。類中的靜態變量和靜態方法能夠與類名一起使用,不需要創建一個類的對象來訪問該類的靜態成員,所以,static修飾的變量又稱作“類變量”。
“類變量”屬於類的成員,類的成員是被儲存在堆內存里面的。一個類中,一個static變量只會有一個內存空間,即使有多個類實例,但這些類實例中的這個static變量會共享同一個內存空間。
static修飾的String,會在堆內存中復制一份常量池中的值。所以調用 static final String 變量,實際上是直接調用堆內存的地址,不會遍歷字符串池中的對象,節省了遍歷時間。
所以使用static final修飾的字符串還是有好處的。
轉自https://www.cnblogs.com/acm-bingzi/p/javaStringStatic.html
