由于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