我有一堂课,叫做Zebra(不是她的真实姓名)。 Zebra覆盖了toString方法,以提供自己复杂的混淆字符串。
哪种方法更有效地对Zebra实例进行字符串化?假设我必须在每个会话中进行数百万次这样的字符串化。zebra.toString()
""+zebra
static String BLANK (singleton)
BLANK+zebra (multiple executions)
。
斑马的价值不能保证相同的地方。
我推测答案可能是-不用担心:编译器使它们都等效。如果那不是答案,请描述使它们与众不同的实例化过程。 (2)和(3)可以相同,因为编译器会将所有相似的字符串分组并将其分配给单个引用。
通常,我会使用""+zebra
,因为我太懒了而无法键入zebra.toString()
。
ATTN:澄清一下。
我已经看到诸如“为什么要这么做,这是不切实际的”之类的批评问题,如果每个程序员都因为没有实用价值而拒绝提出问题,或者每个数学家都这样做,那将是人类的终结。 。
如果我编写了一个迭代例程,则差异可能太小。我对实验结果的兴趣比对过程差异的兴趣要小:
例如,zebra.toString()将仅调用一个toString,而“ + zebra将调用一个额外的字符串实例化和一个额外的字符串concat。这将使其效率降低。或者是。编译器将其无效。
如果您的答案集中在编写迭代例程上,请不要回答,其结果不会解释编译器或机器进程。
优秀程序员的美德=懒于编写代码,但不懒于思考。
最佳答案
通常,除非在很小的最终/硬编码字符串上使用+
运算符,否则我绝不使用它。使用此运算符通常会导致在返回结果字符串之前在内存中创建几个额外的对象(这很糟糕,特别是如果发生“每个会话数百万次”)。
如果确实需要连接字符串,例如在动态构建唯一语句时(例如,对于SQL或输出消息)。使用StringBuilder
!!!连接字符串的效率大大提高。
对于您的特定问题,只需使用toString()
方法。如果您不喜欢键入,请使用IDE(例如eclipse或netbeans),然后使用代码完成功能来保存击键。只需输入方法的第一个字母或2,然后按“ CTRL + SPACE”
关于java - 哪种toString技术更有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7957912/