【发布时间】:2014-04-24 14:43:34
【问题描述】:
我已经在几个地方阅读过它,并且在我的前辈的指导下在 java 中使用字符串常量。所以我通常将所有日志消息和其他必需的字符串内容保存在我的 StringConstants 类中,看起来像这样:
public class StringConstants {
// Logger Messages
// Debug
public static final String DEBUG_ENTERING_METHOD = "Entering Method";
public static final String DEBUG_LEAVING_METHOD = "Leaving Method";
}
我是否还应该在此文件中保留特殊字符/符号/运算符(例如 ':'、'、' 或 '=' 作为最终字符串?
我问这个是因为我知道如果 Strings 对象在内存中,它们不会一次又一次地创建。所以如果我必须做类似的事情
logger.error(StringConstants.ERROR_MSG+":"+some_string);
冒号应该在字符串常量中吗?对我有什么好处吗?
如果我的疑问或疑问不清楚,请在评论中提及,我会编辑问题。
【问题讨论】:
-
对于记录器示例,我会像
logger.error(some_string)一样使用error方法,其中some_string是错误消息。然后,该方法会以您喜欢的方式格式化此消息(例如,在字符串前面加上"Error:")。 -
这是一种观点,但对我来说,StringConstants 类的目的是将所有应用程序消息放在一个位置。这使得国际化更容易一些,以及更正任何拼写或语法错误。目的不是对 Java 进行微优化。
-
为什么不将您的 StringConstants 扩展一个字符并在
StringConstants.ERROR_MSG中包含 :? -
据我了解 logger.error("a"+"b"+"c") 会创建三个字符串对象吗?所以它不是内存有效的!最终的 String 对象将不会被再次创建..
-
@SambhavSharma 创建字符串只会在非常大的规模和短时间内成为内存问题。您可以对其进行测试,但可能在几秒钟内成千上万的字符串将开始显示效率变化。不用担心 O(10) 字符串。
标签: java string memory-management