[英]Java String generation at compile time or runtime
鑒於此代碼:
if(somecondition) {
String one = "one";
//print one;
}
只有在該條件為真時才會生成此字符串?
感謝任何幫助。
編輯:
使用字符串池,可以肯定地說,無論條件如何,字符串one
都會被添加到池中。
那么,如果需要從對象解析變量,會發生什么?
說,
String hello = "Hello Mr " + user.firstName();
這將如何添加到字符串池中? 並且當它確實被添加到字符串池時,它不會正確地創建新的字符串文字(除非 user.firstName() 更改)。
該字符串在您鍵入時生成; 但是,為了讓這個答案有意義,我們需要在應用程序的構建和啟動過程中經歷轉換。
*.java
文件中。*.class
文件中。因此,根據您對希望使用的“創建”類型的定義,可以在多個位置“創建”它。
現在,在您的第一個示例中,使用字符串時並未實現 String 對象,而是使用*.class
文件時。 但是,在您輸入方法之前,它不會被正在運行的程序引用。
最后,使用字符串池化,每次將要創建字符串時,都會搜索現有字符串池,如果找到匹配條目,則使用匹配條目而不是創建新字符串。 這以大量字符串搜索為代價減少了運行時中的字符串數量。
由於您的代碼的詳細信息,您有三個不同的字符串符合池化條件(“Hello Mr”, user.firstName()
的值,以及將它們組合在一起的字符串)。 “你好先生”將與類加載合並(假設正在完成合並)。 user.firstName()
的值會在最初創建返回值時發生。 生成的組合字符串將在分配之前(或來自池的引用,如果它已經存在於池中)被池化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.