由於Java中的字符串是不可變的,我一直使用StringBuilder或StringBuffer來連接字符串。 String.format()方法是否像StringBuilder或StringBuffer一樣處理這個問題?換句話說,String.format()是否像StringBuffer或StringBuilder一樣管理內存?在Java中,是否在String.format()的實現中考慮了Strings的不變性?
回答
基於Oracle JDK的源代碼,似乎該實現爲每個String#format
調用創建一個新的Formatter
,然後爲每個調用分配一個新的StringBuilder
。所以是的。但正如你對問題的評論所提到的那樣,雖然常識意味着它會選擇最有效的做事方式,但這是非常多的實現細節。
有趣,謝謝!因此,作爲後續工作,由於StringBuilder不是線程安全的,因此我認爲String.format()也不是線程安全的......至少是Oracle實現? – fooMonster
如果每次格式調用都會創建一個新的StringBuilder並將其保留在方法的本地,那麼對格式的調用仍然可以是線程安全的。 –
@Michael「仍然可以線程安全」?這聽起來像是暗示開發人員可以通過以線程安全的方式調用String.format()來使其線程安全。顯然。也許我不清楚。跟進,以及原來的問題是關於String.format()的實現。所以我的後續會更好擺在「由於String.format()的實現依賴於Oracle實現中的StringBuilder,並且由於我們知道StringBuilder不是線程安全的,這是否意味着實現String.format()在oracle的jdk中也不是線程安全的?「 – fooMonster
- 1. String.Format是否考慮locale或不?
- 2. Filewatcher是否在Java中考慮了非阻塞IO?
- 3. 是否在dotNet(或C#)中考慮了躍點?
- 4. 轉換時,Java 8的ZonedDateTime是否考慮了夏令時?
- 5. gmtime()函數是否考慮了閏年?
- 6. TimeZoneInfo是否考慮到了DST?
- 7. 我的實現是否考慮插入排序?
- 8. ASP.net中的輸出緩存是否考慮了片段
- 9. 在Jruby中是否實現了ctypes(python)?
- 10. 是否在Monotouch中實現了AudioQueueEnqueueBufferWithParameters?
- 11. java date.before函數是否考慮了時區?
- 12. 數字格式不考慮區域設置。考慮使用的String.format而不是機器人工作室
- 13. java中是否存在handlebars.js實現?
- 14. 檢查類型或實例是否實現IEnumerable而不考慮類型T
- 15. React Component中是否考慮了反模式解析承諾?
- 16. 在MySQL中存儲文件的性能考慮是什麼?
- 17. Java中的LinkedList是否實現了默認的迭代器?
- 18. 當量的String.Format()在Java中
- 19. 在Java中是否實施了密封類,如果是,如何實現?
- 20. C++決策樹實現問題:在代碼中考慮
- 21. Hibernate的@Version能否考慮相關實體的變化?
- 22. 實現與的String.Format
- 23. Drupal是否掛鉤了Java中事件處理的實現?
- 24. 瞭解NG-展現在考慮下面的代碼AngularJS指令
- 25. java-facebook-api:是否實現了FB.Canvas.setAutoResize()?
- 26. 是否爲Java實現了PKCS#1 V2.0?
- 27. Typeof考慮類而不是變量
- 28. 性能考慮
- 29. Java Math.random()考慮
- 30. 我是否在swift中實現了自己的堆棧? swift是否像Java一樣在庫中有堆棧?
(1)這是特定於實現的。 (2)直到你有數據顯示它不能很好地工作,無論它如何被實施,它都可以工作。 (3)正如在第2條中所暗示的那樣,並且作爲*總是*帶有這樣的問題,唯一確定的方法是描述。 – delnan